2017-03-08 72 views
0

如果我有像的状态下对象:在一个终极版减速器更新consisiting对象的数组的状态无突变

[{ 
    "value":"e1", 
    "label":"[email protected]", 
    "domain":"d1", 
    "selected":false 
}, 
{ 
    "value":"e2", 
    "label":"[email protected]", 
    "domain":"d1", 
    "selected":false 
}, 
{ 
    "value":"e3", 
    "label":"[email protected]", 
    "domain":"d1", 
    "selected":false 
}] 

和动作对象

[{ 
    "value":"e1", 
    "label":"[email protected]", 
    "domain":"d1", 
    "selected":false 
}] 

,我怎样才能在改变行动对象“选择”为真,并分别更新状态,而不使用最好纯粹的ES6函数进行变异?

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

+3

为此,[Redux文档](http://redux.js.org/docs/recipes/reducers/ImmutableUpdatePatterns.html#updating-an-item-in-an-array)中有一个专用章节,真的很有用。 – CodingIntrigue

+0

但是,在状态中存在问题 - 哪些属性保证是唯一值?我怀疑'价值'会永远是唯一的 –

+0

@AhabhabhAgarwal价值是独一无二的。我正在使用React Select使用的结构,由于某种原因使用值作为唯一的选择选项 –

回答

-1

我假设有东西在当前state一大堆,你想改变,你的阵列,第一个对象的selected价值true中,然后合并与当前状态和更新状态。

比方说你的“状态对象”被称为foo,在你减速的功能,你会首先做一些像foo[0].selected = true;,然后你可以使用传播运营商,像更新状态:

return { 
    ...state, 
    foo 
}; 

希望这是有道理的,或者我对你的要求有点不满意?

+0

在更新之前,我还需要将状态字段全部重置为“已选中”: '假'而不改变它。 –