修改状态和更新减速器的正确方法? (反应/还原)
Posted
技术标签:
【中文标题】修改状态和更新减速器的正确方法? (反应/还原)【英文标题】:Modifying state & the correct way to update my reducer? (React / Redux) 【发布时间】:2017-11-10 05:39:03 【问题描述】:我相信我已经修改我的状态已经有一段时间了。我想做以下事情,想知道为什么它不起作用:
case "SAVE_DATA_TO_PERSON" :
let newState = ...state, data: start: action.payload.start, end: action.payload.end;
return newState;
我在这里创建一个新对象,采用旧状态,并添加我的新数据。 虽然它似乎确实有所作为,但它不会长时间保留数据。在触发其他动作后,它就消失了。我想知道为什么?
这是我以前的做法,而且似乎有效:
case "SAVE_DATA_TO_PERSON" :
let newState = state;
newState.audio = start: action.payload.start, end: action.payload.end;
return newState;
但是在这里,我似乎正在修改状态。
我只想知道我的第一个解决方案是不是正确的,我这里的第二个解决方案确实是修改状态。
【问题讨论】:
当然第二种方案是直接修改状态——怎么会不呢? 我想我认为我已经将状态复制到 newState(作为新对象)中,并且没有使用引用。 不,它们指的是同一个状态对象。 【参考方案1】:在第二个选项中,您直接修改状态。
reducer 应该在 React-Redux 应用程序中改变状态而不改变现有状态。
不变性是 Redux 的要求,因为 Redux 代表您的 应用程序状态为“冻结的对象快照”。有了这些离散 快照,您可以保存您的状态,或反转状态,通常 对所有状态变化有更多的“核算”。 Ref.
您云考虑使用不可变实用程序/库作为dot-prop-immutable 或Immutable.js
redux 文档中的相关文章:
http://redux.js.org/docs/recipes/reducers/ImmutableUpdatePatterns.html
【讨论】:
以上是关于修改状态和更新减速器的正确方法? (反应/还原)的主要内容,如果未能解决你的问题,请参考以下文章