繁体   English   中英

Redux中的状态突变

[英]State mutation in Redux

我知道,Reducer只是纯函数,它们接受先前的状态和操作,并返回新的状态对象,而不是使先前的状态发生变化。
但是,尽管直接突变不是Redux的理念,但还是有可能的(或者我错过了一些东西):

 const reducer = (oldState = initialState, action) => { switch (action.type) { case "ACT": { // mutate state directly instead of create a new one oldState.subobj.ssub.key = "hi hi"; return oldState; } default: { return oldState; } } }; 

完整代码在这里

为什么不重新执行验证以阻止此类操作?
我们如何确保开发人员永远不会这样做?

Redux无法进行此类验证,因为它不知道某个操作的新数据是否应该实际更新状态。 Redux使用reducers,因为它不知道如何更新状态。 这是您的业务逻辑,因此您必须提供这种状态转换。

Redux正在比较对象引用,这是很快的。 如果它将执行某种重复的状态树并以递归方式比较对象,则会引入性能损失。

为了确保您的开发人员没有这样做,我猜您最好的选择是建立良好的开发纪律,对Reducer进行单元测试,在这些测试中使用deep-freeze库,并在代码审查中强制使用deep-freeze

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM