Как получить доступ к redux-store из response componentDIdMount ()

В следующем коде я пытаюсь передать state.userData.userDetails с redux-store на getleftpaneProductCatalogue(), но state.userData.userDetails недоступен для componentDidMount(). Я попытался назначить state.userData.userDetails на this.prop.userProfile, но все равно this.prop.userProfile - пустое значение. Как получить доступ к prop в componentDidMount?

import React,{Component} from 'react';
import { connect } from 'react-redux';
import {Row, Col } from 'react-materialize';
import {getleftpaneProductCatalogue} from '../actions/leftpane-actions';
import ProductCatalogueLeftPaneComp from '../components/pages/product-catalogue-leftpane';

class ProductCatalogueLeftPane extends Component {
    constructor(props) {
      super(props)

    }

    componentDidMount() {
      console.info('this.props^', JSON.stringify(this.props)); 
      this.props.getleftpaneProductCatalogue().then((data) => {
        console.info('productdata', data);
      })
    }

    render() {
      return (
        <div>
            {JSON.stringify(this.props.userProfile)}

       </div>
      )
    }

  }

  const mapStateToProps = (state) => {
    console.info('state^', JSON.stringify(state));
    return {leftpaneProductCatalogue: state.leftpaneProductCatalogue, userProfile: state.userData.userDetails};
  };

  const mapDispatchToProps = (dispatch) => {
    return {
      getleftpaneProductCatalogue: () => dispatch(getleftpaneProductCatalogue()),
    };
  };

  export default connect(mapStateToProps, mapDispatchToProps)(ProductCatalogueLeftPane);
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
0
1 789
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете получить доступ к состоянию непосредственно в mapDispatchToProps и передать его в getleftpaneProductCatalogue:

componentDidMount() {
  const { dispatch, getleftpaneProductCatalogue }

  dispatch(getleftpaneProductCatalogue())   
}

const mapDispatchToProps = dispatch => {
  return {
    getleftpaneProductCatalogue: () => (dispatch, getState) => {
      const state = getState()
      const details = state.userData.userDetails

      return dispatch(getleftpaneProductCatalogue(details))
    },
    dispatch
  }
}

Тем не менее, как вы это делаете, передача состояния через mapStateToProps все еще действительна, но более подробна. Следовательно, проблема будет в другом месте.

Вот моя ставка. Я предполагаю, что вы получаете userData где-то в вашем коде с вызовом async API, и он еще не загружен. В этом случае вам следует сначала дождаться получения данных, а затем вы сможете получить к ним доступ в своем компоненте ProductCatalogueLeftPane.

Я делал именно то, о чем вы догадались! При входе в систему я добавляю данные аутентификации пользователя в хранилище redux, но это было асинхронно, поэтому при установке домашнего экрана хранилище еще не обновлялось.

Ollie 10.01.2019 05:43

Прохладный! Я рад узнать, что вы обнаружили ошибку и исправили ее.

Jordan Enev 10.01.2019 09:21

Другие вопросы по теме