React / Redux:mapStateToProps 实际上没有将状态映射到道具

React / Redux: mapStateToProps not actually mapping state to props

我在一个项目中使用 React 和 Redux,但我在实现 enable/disable 按钮的功能时遇到了问题。我已经能够:

但是,enable/disable 功能仍然不起作用,因为 mapStateToPropsconnect 似乎并未真正将状态映射到道具。我正在跟踪 canSubmit,它在状态内发生变化,但在 props 中是 undefined。我缺少什么才能成功将状态映射到道具?

相关代码:

UserFormView.js

const mapStateToProps = (state) => ({
  routerState: state.router,
  canSubmit: state.canSubmit
});
const mapDispatchToProps = (dispatch) => ({
  actions: bindActionCreators(ActionCreators, dispatch)
});

class UserFormView extends React.Component {

...

}

export default connect(mapStateToProps, mapDispatchToProps)(UserFormView);

操作:

export function enableSubmit(payload) {
  return {
    type: ENABLE_SUBMIT,
    payload: payload
  };
}

export function disableSubmit(payload) {
  return {
    type: DISABLE_SUBMIT,
    payload: payload
  };
}

Reducer(使用 createReducer 辅助函数):

const initialState = {
  canSubmit: false
};

export default createReducer(initialState, {

  [ENABLE_SUBMIT]: (state) => {
    console.log('enabling');
    return Object.assign({}, state, {
      canSubmit: true
    });
  },

  [DISABLE_SUBMIT]: (state) => {
    console.log('disabling');
    return Object.assign({}, state, {
      canSubmit: false
    });
  }

});

您似乎没有使用键 canSubmit 创建 reducer。这取决于您的商店配置,更具体地说,取决于您如何从 reduce 文件中导入默认导出。这里要提到的另一件事是,您可能会有名称为 canSubmit 和键 canSubmit 的 reducer,因此您需要在 state.canSubmit.canSubmit 之类的代码中引用它——您是从 reducer 上的操作处理程序返回对象,不是简单的 truefalse 布尔值。