Я пытаюсь понять, почему я должен создать новый объект для манипуляции, а затем отправить его в хранилище, вместо того чтобы иметь возможность отправлять экземпляр объекта, который передается функции из хранилища.
Например, если у меня есть следующий код:
export const doStuff = (
stuff // stuff is from the store
) => dispatch => {
stuff['foo'] = 'bar'
console.log("stuff", stuff) // prints updated object
dispatch({
type: SET_STUFF,
payload: stuff
})
}
, тогда DOM и состояние не будут обновляться.
Однако, если я это сделаю:
export const doStuff = (stuff) => dispatch => {
const _stuff = JSON.parse(JSON.stringify(stuff))
_stuff['foo'] = 'bar'
console.log("_stuff", _stuff)
dispatch({
type: SET_STUFF,
payload: _stuff
})
}
Тогда , это будет работать. Почему это так?
Я посмотрел документацию здесь , но мне трудно понять это. Является ли JSON.parse(JSON.stringify(obj))
единственным способом go манипулировать состоянием и обновлять его?
Редактировать
Мой редуктор:
case SET_STUFF:
return {
...state,
cartItems: payload
};