Redux - 在哪里准备数据

IT技术 javascript reactjs redux
2021-05-17 05:31:25

我是 Redux 的新手,但遇到了问题。我有一个对象数组,在该数组中添加一个新对象后,我想更改所有其他对象。例如,这样的事情:

[{id : 0, visible: false}, {id : 1, visible: true}] - old array
[{id : 0, visible: false}, {id : 1, visible : false}, {id : 2, visible : true}] - that I want

我应该在哪里准备旧状态?正如 redux 文档所说,在减速器中,我不应该用状态做任何事情,我只需要返回新状态。我可以在 reducer 中编写函数,准备先前状态的副本并作为新状态返回吗?就像是:

export function ui(state = initialState, action){
switch (action.type){
  case "SOME_ACTION" :
    var newState = someFunction(state.items, action)
    return Object.assign({}, state, {
      items : newState
    });
  default:
     return state;
  }}

function someFunction(array, action){
    .... some code
    return newArray
}

或者我应该把这个功能放在另一个地方?编辑状态数据的最佳实践是什么?

1个回答

对状态的所有修改都应该在您的减速器中完成。当您以不可变的方式进行操作时,返回新状态和修改旧状态是一回事。也就是说,新状态是来自旧状态的数据,可能已修改,并带有新数据。

鉴于您的示例,我可能会执行以下操作:

function rootReducer(state = initialState, action) {
 switch(action.type) {
   case: "SOME_ACTION":
    var allStateVisibleFalse = state.map(x => Object.assign({}, x, { visible: false} ));
    return [...allStateVisibleFalse, { id: 2, visible: true}];
 }
 ...
}