在Redux存储中更新字符串

时间:2018-08-30 06:45:24

标签: reactjs redux react-redux

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

1 个答案:

答案 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)
]