React/Redux:mapStateToProps实际上并没有将状态映射到道具
React / Redux: mapStateToProps not actually mapping state to props
我在一个项目中使用React和Redux,在实现启用/禁用按钮的功能时遇到问题。我已经能够:
- 触发一个方法
- 让该方法触发动作创建者
- 分派行动
- 在reducer中捕获该操作并创建一个新的更新状态
- 请参阅Redux DevTools中的更新状态
然而,启用/禁用功能仍然不起作用,因为mapStateToProps
和connect
实际上并没有将状态映射到道具。我正在跟踪canSubmit
,它在状态中发生变化,但在道具中是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。这取决于您的存储配置,更具体地说,取决于您如何从reduces文件导入默认导出。这里要提到的另一件事是,您可能有一个名为canSubmit
的reducer和一个键canSubmit
,所以您需要在类似state.canSubmit.canSubmit
的代码中引用它——您从reducer上的操作处理程序返回对象,而不是简单的true
或false
布尔值。
相关文章:
- 如何在映射数组中添加换行符
- ng映射方向备选方案
- 无法通过数组映射绑定
- 事件和状态
- ReactJS映射:如何仅在url变量不为空时呈现html链接
- 获取选择框的状态
- 相位器状态未捕获参考错误
- 如何更改reactjs中外部/独立组件的状态或属性
- 如何使用密码检测网络中的状态连接
- Ember.js-接口状态应该存储在哪里
- 混合 ui-sref 和 $state.go 在 Angular ui-router 中进行状态转换
- 在Angular 2中布线期间保持零部件处于活动状态
- 使用Scala Play Framework视图中的键检索映射值
- 在mvc应用程序中,在回发时保留最初隐藏的文本框的隐藏或可见状态
- Highcharts:树映射选择状态不起作用
- 在拉力赛中:我是否可以将自定义任务状态映射到拉力赛任务板中的现有任务状态(类似于用户情景的看板)
- 将不需要't映射到状态
- React/Redux:mapStateToProps实际上并没有将状态映射到道具
- 将状态绑定到 React 中映射函数内部的条件语句
- 错误:模板应该只负责将状态映射到UI.避免在模板中放置带有副作用的标记,例如