Javascript React Immutability helper-更新数组中的许多类似对象
我在Redux商店中有状态,我想将所有isPlaying更改为false。我不知道怎样才能做得更好。以下是我到目前为止所做的Javascript React Immutability helper-更新数组中的许多类似对象,javascript,arrays,reactjs,redux,store,Javascript,Arrays,Reactjs,Redux,Store,我在Redux商店中有状态,我想将所有isPlaying更改为false。我不知道怎样才能做得更好。以下是我到目前为止所做的 const INITIAL_STATE = { isPlaying: true, allLangs: [ { shortName: 'es', fullName: "spanish", order: 0, isPlaying: false }, {
const INITIAL_STATE = {
isPlaying: true,
allLangs: [
{
shortName: 'es',
fullName: "spanish",
order: 0,
isPlaying: false
}, {
shortName: 'pt',
fullName: "portuguese",
order: 0,
isPlaying: false
},
{
shortName: 'gb',
fullName: "english",
order: 0,
isPlaying: true
}
]
}
return update(state,
{
$merge: {isPlaying: false},
allLangs: {
[0]: {
$merge: {isPlaying: false}
},
[1]: {
$merge: {isPlaying: false}
},
[2]: {
$merge: {isPlaying: false}
}
}
});
所以我的问题是:有没有比单独调用所有索引更好的方法呢?鉴于您当前的数据结构,如果您想将
isplay
的每个实例都设置为false,那么您所拥有的是正确的。根据您的用例,以下是一些其他建议:
重置为默认值
假设无论何时将isplay
设置为false,游戏都将结束,您将开始一个新游戏。然后,最简单的方法可能是直接将状态设置为initialState
更改数据结构
这取决于您的用例,但我的第一直觉是您的数据结构存在重复。你真的能同时用英语和西班牙语玩游戏吗?如果没有,考虑这样做:
常数allLangs={
es:{
全名:“西班牙语”,
订单:0,
}
}
然后,在您的状态中,您将指向活动语言:
const state = {
isPlaying: false,
activeLanguage: "es"
}
以这种方式进行重构可以为您提供一个单一的真相来源。我建议您在单独的数组变量中使用'allLangs'数组,比如说'newAllLangs',并使用map()更改'isplay',最后将'newAllLangs'设置为state。像这样的 我正在考虑您在userAction.js中执行此操作。假设您通过mapStateToProps获得了allLangs,并使用mapDispatchToProps将此数据发送到userAction.js。在userAction.js中,您可以手动填充所有语言并将它们发送回reducer。reducer将根据您从userAction发送的内容更新存储 如果你想要更多的曝光,这是理论部分。你可以做一把小提琴,在这里分享