我的减速器是这样的:Redux Reducer - 如何在不改变状态的情况下更新对象值?
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
基本上,我只是想更新的球员卡,但如果我不包括姓名和分数,那么那些获得新的状态删除。
理想情况下,我需要做这样的事情: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
});
这是怎么回事?让我知道我是否有任何改进。
可能会考虑immutable.js并对react的本机进行读取:https://facebook.github.io/react/docs/update.html – dandavis
您使用的是babel吗?你是否启用了“stage-2”预设? – QoP