Javascript 为什么我们需要在Redux reducer中更新之前传播状态?
对专业人士来说,这只是一个简单的问题。我正在构建一个减速机,一段代码如下所示:Javascript 为什么我们需要在Redux reducer中更新之前传播状态?,javascript,ecmascript-6,redux,Javascript,Ecmascript 6,Redux,对专业人士来说,这只是一个简单的问题。我正在构建一个减速机,一段代码如下所示: export const cusDataReducer = (state = cusDataInitialState, action) => { let newState = {...state} switch (action.type) { case "CUS_READ": newState.data = action.value;
export const cusDataReducer = (state = cusDataInitialState, action) => {
let newState = {...state}
switch (action.type) {
case "CUS_READ":
newState.data = action.value;
newState.loading = false;
break;
...
我的问题是,在这种情况下,国家和{……国家}之间有什么区别?如果我更改newState=state,代码将中断。然而,state和{…state}的控制台日志看起来完全相同
这是我的商店:
import {cusDataReducer} from './cusdata'
let rootReducer = combineReducers({
cusdata: cusDataReducer
});
export const Store = createStore(rootReducer,applyMiddleware(thunk))
这不会创建新对象:
let newState = state;
let newState = {...state};
变量newState只指向与state相同的对象。修改该对象会改变当前状态,这是错误的
但是,这会创建一个新对象:
let newState = state;
let newState = {...state};
扩展运算符。。。基本上是用现有对象的每个属性填充新对象的一种非常方便的缩写。较长的版本可能类似于:
let newState = {
prop1: state.prop1,
prop2: state.prop2,
//etc.
};
通过创建新对象,它不再是当前的实际状态。你可以随意改变你的新对象。返回后,Redux将用整个新状态替换整个当前状态。这不会创建新对象:
let newState = state;
let newState = {...state};
变量newState只指向与state相同的对象。修改该对象会改变当前状态,这是错误的
但是,这会创建一个新对象:
let newState = state;
let newState = {...state};
扩展运算符。。。基本上是用现有对象的每个属性填充新对象的一种非常方便的缩写。较长的版本可能类似于:
let newState = {
prop1: state.prop1,
prop2: state.prop2,
//etc.
};
通过创建新对象,它不再是当前的实际状态。你可以随意改变你的新对象。返回后,Redux将用整个新状态替换整个当前状态。很有意义。谢谢那么,如果我添加另一个名为emldata的reducer,那么如何知道要在存储中更新哪个reducer键呢?@Elcid_91:我不知道你的意思。reducer的主要结构是一个开关,它决定调用哪种操作类型。这些都应该是相互排斥的。一旦进入正确的情况,那么代码就是专门编写的,以执行对状态的必要更新。无论您需要为该操作更新哪些字段,您都会对其进行更新。好的,我会再试一次,我问,因为我在存储中有两个结构相同的减缩器。在存储中加载了一个密钥,但另一个密钥加载了相同的数据…非常奇怪。如果再次发生这种情况,我将清理muy代码并在另一个问题中发布..谢谢!这很有道理。谢谢那么,如果我添加另一个名为emldata的reducer,那么如何知道要在存储中更新哪个reducer键呢?@Elcid_91:我不知道你的意思。reducer的主要结构是一个开关,它决定调用哪种操作类型。这些都应该是相互排斥的。一旦进入正确的情况,那么代码就是专门编写的,以执行对状态的必要更新。无论您需要为该操作更新哪些字段,您都会对其进行更新。好的,我会再试一次,我问,因为我在存储中有两个结构相同的减缩器。在存储中加载了一个密钥,但另一个密钥加载了相同的数据…非常奇怪。如果再次发生这种情况,我将清理muy代码并在另一个问题中发布..谢谢!仅供参考:以下内容适用于React状态,相同的不变性原则适用于Redux还原器:仅供参考:以下内容适用于React状态,相同的不变性原则适用于Redux还原器: