Dre*_*rew 2 javascript immutability reducers reactjs redux
我的减速机看起来像这样:
const players = (state = {}, action) => {
switch (action.type) {
case 'UPDATE_PLAYERS_CARDS':
return Object.assign({}, state, {
[action.player]: {
name: state[action.player].name,
score: state[action.player].score,
cards: action.cards
}
})
default:
return state
}
}
export default players
Run Code Online (Sandbox Code Playgroud)
基本上,我只想更新球员卡,但如果我不包括名称和分数,那么这些将在新状态下被删除.
理想情况下,我需要做这样的事情:state[action.player].cards = action.cards 但其中一条规则是永远不要改变状态.
上面的方法可行,但这需要我总是知道数据结构,所以如果我将来添加其他东西,我需要记得回到这个reducer并重新添加,所以我不会丢失它.
有没有更好的方法来实现这一目标?
编辑:感谢Vijay提出多个对象分配的建议.我最终得到了这个:
case 'UPDATE_PLAYERS_CARDS':
const playerObject = Object.assign(state[action.player], { cards: action.cards });
return Object.assign({}, state, {
[action.player]: playerObject
});
Run Code Online (Sandbox Code Playgroud)
那个怎么样?如果我能做出任何改进,请告诉我.
多种Object.assign方法看起来很难看.
你可以做:
return { ...state.action.player, cards: action.cards }
Run Code Online (Sandbox Code Playgroud)
注意:您需要stage-2使用babel预设才能使用此功能.
一旦数据结构更新变得相当复杂,你可以使用ImmutableJS的setIn,updateIn方法做深更新容易.
| 归档时间: |
|
| 查看次数: |
6104 次 |
| 最近记录: |