我正在使用redux和react。我在商店里有一个钥匙,它的值是一个字符串。
这是store.getState();
{appBgColor: "#FFF"}
我正在像这样更新商店。
store.dispatch( changeAppBgColor("#FC0") );
减速器
const rootReducer = (state = initialState, action) => {
switch (action.type) {
case CHANGE_APP_BG:
return { ...state, appBgColor: action.payload};
default:
return state;
}
};
一切正常,只要发生新的调度,appBgColor都会更改。
问题
我已经读过,要更改redux存储区中的密钥,应使用concat,slice或join使状态不变。所以我怀疑我做错了。这是正确的方法吗?
答案 0 :(得分:1)
对于在您的州内更新字段appBgColor
的用例中,reduceor的实现正确。
请注意,当您返回{ ...state, appBgColor: action.payload}
时,您并不是在改变状态,而是实际上是创建现有状态的副本,应用更改并返回它。这样可以确保状态为不可变,即不会直接修改状态。
在状态中更新嵌套项目时,仅需要使用slice,concat等功能。例如,当您需要从状态内的数组中删除元素时,则需要使用slice
,如下所示。
const index = state.findIndex(a => a.id === action.id)
return [
...state.slice(0, index), ...state.slice(index + 1)
]