我正在使用redux做出反应。我在商店中有一个键,其值为字符串。
这是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来使状态不可变。所以我怀疑我做错了。这是正确的方法吗?
对于在您的州内更新字段appBgColor
的用例,您的reducer实现是正确的。
请注意,当您返回{ ...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)
]