在redux存储中更新字符串

问题描述 投票:0回答:1

我正在使用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来使状态不可变。所以我怀疑我做错了。这是正确的方法吗?

reactjs redux react-redux
1个回答
1
投票

对于在您的州内更新字段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)
]
© www.soinside.com 2019 - 2024. All rights reserved.