我的減速器是這樣的: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