【问题标题】:Immer update data using spread使用 spread 更新数据
【发布时间】:2019-04-12 21:25:20
【问题描述】:

假设我在 redux 中有状态

const initialState = {
 age: 0,
 title: undefined,
 body: undefined,
 author: undefined
}

我想用我从后端获得的 newState 更新它,它具有完全相同的键(年龄、标题、正文、作者),所以为了使其不可变,我使用扩展运算符

const updateState = (state, newState) => {
 return {...state, ...newState}
}

问题是这个函数运行良好,但是如果主体是一个对象并且其中有嵌套对象怎么办。我想做一个可以重用的功能。我不想一键手动更新它

我遇到了 Immer,但仍然无法弄清楚如何创建函数 updateState(不是手动逐个键更新)。你能告诉我怎么做吗?

【问题讨论】:

  • 您能否分享更多关于您想要实现的目标,可能使用示例对象和预期结果?非常感谢具有当前进度的代码沙箱。

标签: reactjs immer.js


【解决方案1】:
const updateState = produce((draft, action) => {
 Object.assign(draft, action);
})

const updateState = produce((draft, action) => {
 return {...draft, ...action}
})

在这两种情况下,immer 的想法是要么返回一个新状态,要么直接改变草稿对象,但绝不会两者兼而有之。

【讨论】:

  • 欢迎来到 Stack Overflow。如果您能解释为什么您的代码可以解决问题,将会很有帮助。
  • 今天遇到了这个问题!解释是你需要用Object.assign 改变草稿对象,这样Immer 就会明白对象被改变了。
猜你喜欢
  • 2019-07-13
  • 1970-01-01
  • 2016-05-24
  • 2019-11-14
  • 2019-04-29
  • 2020-06-21
  • 1970-01-01
  • 2018-09-18
  • 2013-07-10
相关资源
最近更新 更多