Мой редуктор выглядит следующим образом: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
, но одно из правил - никогда не мутировать состояние.
Метод выше будет работать, но для этого требуется, чтобы я всегда знал структуру данных, поэтому, если я добавлю что-то еще в нее в будущем, мне нужно будет помнить, что возвращаюсь к этому редуктору и добавляю это обратно, чтобы я не теряйте его.
Есть ли лучший способ достичь этого?
Редактировать: Спасибо Vijay за предложение о назначении нескольких объектов. Я закончил работу с этим:
case 'UPDATE_PLAYERS_CARDS':
const playerObject = Object.assign(state[action.player], { cards: action.cards });
return Object.assign({}, state, {
[action.player]: playerObject
});
Как это? Сообщите мне, есть ли какие-либо улучшения, которые я могу сделать.
может рассматривать immutable.js и читать на родном реагировании: https://facebook.github.io/react/docs/update.html – dandavis
Вы используете babel? У вас включена предустановка «stage-2»? – QoP