在我的React-Redux应用程序中,我正在更改redux state
,它看起来像这样
state {
key1: oldVal1
key2: oldArray1 //The value here is an array
.
.
.
}
现在我下次更新状态......
state {
key1: newVal1
//But for key2 I want to keep the value as the same oldArray1
//Now since that oldArray1 is not anywhere except in the old state, can I do this...?
key2: state.key2
.
.
.
}
因此,如果我key2: state.key2
和state.key2
是一个数组,那么引用会因为状态发生变化而丢失,并且state.key2不会指向任何内容吗?
我只想粗略解释object/array
引用如何影响redux中的状态。
答案 0 :(得分:2)
您总是希望返回一个新状态 - 而不是改变现有状态。您可以使用spread运算符运算符返回保留旧状态的某些相同属性的新状态
export default function(state = {}, action) {
switch(action.type) {
case WHATEVER_ACTION:
const newValue = action.payload.value; //assuming this comes from action
return { ...state, key: newValue };
}
}
这样您就可以使用新值更新要更新的密钥,但是您希望保留的所有内容都将保留其旧值,因为它会传播到newState
对象中。
答案 1 :(得分:1)
请注意,Redux状态是不可变的,因此第一个状态和第二个状态是两个不同的对象,因此,如果使用Object.assign或其他不可变工具,则可以将旧值分配给新键。
switch (action.type) {
case SET_VISIBILITY_FILTER:
return Object.assign({}, state, {
key1: action.newVal1,
key2: state.key1,
})