Redux/React-Redux - 在减速器中使用 "state = XXX"
Redux/React-Redux - using "state = XXX" in the reducer
我们使用 Redux.js 和 React.js (React-Redux),在 reducer 中我们使用以下代码(我们使用 redux-actions 来减少样板文件):
const update = require('react/lib/update');
const myReducer = handleActions
({
[myAction]: (state, action) => {
state = update(state, {
something: {$set: !state.someProperty}
});
return someFunction(state);
}
})
我们使用 React Immutability Helpers 中的 update
,但使用 state =
将结果分配到状态。
这是否违反 basic Redux guidlines - 即改变状态?看起来是这样,但代码似乎完美且快速地运行,redux devtools 正确显示状态更改...
您的示例 是 没问题,因为您实际上并没有改变 state
变量指向的对象的内容。相反,您只是将名为 state
的局部变量更新为指向不同的对象。
了解变量和引用在 Javascript 中的工作方式很重要,这将有助于弄清这里发生的事情。
就我个人而言,为了清楚起见,我建议 const newState = update(....)
。
我们使用 Redux.js 和 React.js (React-Redux),在 reducer 中我们使用以下代码(我们使用 redux-actions 来减少样板文件):
const update = require('react/lib/update');
const myReducer = handleActions
({
[myAction]: (state, action) => {
state = update(state, {
something: {$set: !state.someProperty}
});
return someFunction(state);
}
})
我们使用 React Immutability Helpers 中的 update
,但使用 state =
将结果分配到状态。
这是否违反 basic Redux guidlines - 即改变状态?看起来是这样,但代码似乎完美且快速地运行,redux devtools 正确显示状态更改...
您的示例 是 没问题,因为您实际上并没有改变 state
变量指向的对象的内容。相反,您只是将名为 state
的局部变量更新为指向不同的对象。
了解变量和引用在 Javascript 中的工作方式很重要,这将有助于弄清这里发生的事情。
就我个人而言,为了清楚起见,我建议 const newState = update(....)
。