【发布时间】:2018-02-15 12:11:15
【问题描述】:
redux 指南指出:
我们不会改变状态。我们使用 Object.assign() 创建一个副本。 Object.assign(state, { visibilityFilter: action.filter }) 也是错误的:它会改变第一个参数。您必须提供一个空对象作为第一个参数。您还可以启用对象扩展运算符提案以改为编写 { ...state, ...newState }。
我碰巧发现自己正在编写以下工作代码的 sn-p:
[actions.setSelection](state, {payload}) {
state[payload.key] = payload.value;
return state;
},
我对此有一种不好的感觉,并重新访问了智慧指南。此后我将其重写为:
[actions.setSelection](state, {payload}) {
const result = Object.assign({}, state);
result[payload.key] = payload.value;
return result;
},
我很确定我在代码中的其他地方触犯了上述诫命。如果不努力追踪他们,我会考虑什么样的后果?
(注意:上面的 reducer 语法是通过 redux-actions 实现的。否则它将是 reducer fn switch/case 中的代码块。)
【问题讨论】:
-
我相信如果你在你的 reducer 中改变状态,当一个动作被调用时你的组件不会重新渲染。
标签: react-redux