【发布时间】:2018-09-19 01:22:59
【问题描述】:
我正在尝试使用 reducer 在我的状态下更改数组中的一项。
状态如下:
state: {
items: [
{
id: 1,
name: 'Superman',
wearsCape: true
},
{
id: 2,
name: 'Batman',
wearsCape: true
},
{
id: 3,
name: 'Iron Man',
wearsCape: false
}
];
}
我正在尝试过滤状态中的所有项目以搜索名称等于 sHero.name 的超级英雄的首次出现。然后我试图改变找到的超级英雄的属性。 reducer 代码如下所示:
function findCapedCrusader(state, { sHero }) {
var result = state.items.filter(s => {
return s.name === sHero.name;
});
result[0].wearsCape = false;
return { ...state };
}
我是否通过执行上述操作来改变状态??
注意:为愚蠢的例子道歉。我是 react 和 redux 的新手。
【问题讨论】:
-
否,因为
.filter()和.map()一样,返回一个全新的数组。 -
其实 OP 会改变原始状态。
.filter返回相同的引用对象,并且属性发生了变化。
标签: javascript reactjs redux immutability