无法从redux的商店获得状态

时间:2018-04-27 11:23:02

标签: reactjs redux

我正在开发React / Redux应用程序,我在调度动作后从redux store获取一个特定状态时遇到问题。我不知道为什么会发生这种情况,因为我没有遇到其他州的问题。这是我的代码:

减速

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 :(得分:0)

您忘记了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);

现在,您可以访问Component中的this.props.lectures(someParams)函数,该函数可以分派操作。