Не могу получить состояние из магазина редукса - PullRequest
0 голосов
/ 27 апреля 2018

Я занимаюсь разработкой приложения React / Redux, и у меня возникла проблема с получением одного конкретного состояния из хранилища резервов после отправки действия. Я понятия не имею, почему это происходит, потому что у меня не было такой проблемы с другими государствами. Вот мой код:

Переходник

import {SET_CURRENT_USER, SET_LECTURES} from '../actions/actionTypes';
import isEmpty from 'lodash/isEmpty';

const initialState = {
  isAuthenticated: false,
  user: {},
  lectures: []
}

export default (state = initialState, action = {}) => {
    switch(action.type) {
    case SET_CURRENT_USER:
        return {
            isAuthenticated: !isEmpty(action.user),
            user: action.user
        };
    case SET_LECTURES:
        return {
            lectures: action.lectures
          }
    default: return state;
    }
}

Действие создателя и диспетчерское действие

import { SET_LECTURES } from './actionTypes';

export const setLectures = (lectures) => {
  return {
    type: SET_LECTURES,
    lectures
  }        
}
export const lecture = (lectures) => {
   return dispatch => {
    console.log(lectures);
    dispatch(setLectures(lectures));
  }
}

Проблема связана с SET_LECTURES типом действия, в частности lectures свойством объекта действия. В компоненте, из которого я хочу получить состояние lectures, я делаю mapStateToProps следующим образом:

const mapStateToProps = function(state) {
  return {
    notifications: state.notifications,
    lectures: state.lectures
  }
}
/*
*Code of the class
*/
export default connect(mapStateToProps, null)(AddQuestionForm);

Я пропустил код, который запускает тип действия диспетчеризации SET_LECTURES, потому что он работает нормально. Я также использовал React Developer Tools для отслеживания состояний, и существует состояние lectures. Я просто не могу получить это состояние из моего компонента, когда я делаю console.log(this.props.lectures) из ComponentDidMount(), он показывает undefined . Не могли бы вы объяснить, что я здесь делаю не так? Буду признателен за любую помощь.

1 Ответ

0 голосов
/ 27 апреля 2018

Вы забыли о dispatch:

export const lectureAction = lectures => dispatch => {
   return dispatch => {
    dispatch(setLectures(lectures));
  }
}

В компоненте:

import { bindActionCreators } from 'redux';

const mapStateToProps = function(state) {
  return {
    notifications: state.notifications
  }
}

// use map dispatch for actions:
const mapDispatchToProps = dispatch => 
    bindActionCreators({
        lectures: lectureAction
    }, dispatch);

/*
*Code of the class
*/

// connect map dispatch here:
export default connect(mapStateToProps, mapDispatchToProps)(AddQuestionForm);

Теперь у вас есть доступ к функции this.props.lectures(someParams) в вашем Компоненте, которая отправляет действие.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...