更新一系列对象的状态,而无需突变



如果我有一个状态对象,例如:

[{
   "value":"e1",
   "label":"john@example.com",
   "domain":"d1",
   "selected":false
},
{
   "value":"e2",
   "label":"jack@example.com",
   "domain":"d1",
   "selected":false
},
{
   "value":"e3",
   "label":"silvia@example.com",
   "domain":"d1",
   "selected":false
}]

和动作对象

{
    "value":"e1",
    "label":"john@example.com",
    "domain":"d1",
    "selected":false
}

在redux还原器中,如何在"选择"中"选择"中的动作对象中分别更改状态,而无需使用最好的纯ES6函数进行突变?

我对Redux世界非常陌生,发现很难在不突变的情况下更新状态。

实际上我很久以前就已经对此进行了分类,但认为这可能对他人有用:

export const select = (state, action) => {
    const index = state.findIndex(elem => elem.value === action.payload.value);
    return [
        ...state.slice(0, index),
        {
            ...action.payload,
            selected: true
        },
        ...state.slice(index + 1)
    ];
};

我假设当前state中有很多东西,并且您想在数组中更改为第一个对象的 selected值为 true,然后将其与当前状态合并并更新状态。

假设您的"状态对象"称为 foo,在您的还原函数中,您将首先执行诸如foo[0].selected = true;之类的操作,然后您可以使用everal oterator更新状态,例如:

return {
  ...state,
  foo
};

我希望这有意义,或者我问的是我的问题?

最新更新