redux reducer能否将旧状态的属性作为新状态的一部分返回?

redux reducer能否将旧状态的属性作为新状态的一部分返回?,redux,Redux,假设我有这种状态: state: { field1: value1, field2: {a: 5, b: 7} } 如果减速机只想更新field1,减速机能否将包含新field1和现有对象状态的新对象返回。field2作为新返回状态的field2属性?或者减速机必须克隆field2吗?使用扩展运算符 return { ...state, field1: newVal } 下面是详细的不可变更新模式链接 Object.assign()是您正在寻找的,现在您也可以使用spread操

假设我有这种状态:

state: {
  field1: value1,
  field2: {a: 5, b: 7}
}
如果减速机只想更新
field1
,减速机能否将包含新
field1
和现有对象
状态的新对象返回。field2
作为新返回状态的
field2
属性?或者减速机必须克隆field2吗?

使用扩展运算符

return {
 ...state, 
 field1: newVal
}
下面是详细的不可变更新模式链接

Object.assign()
是您正在寻找的,现在您也可以使用spread操作符(…),但请注意,这些都是ES6功能,因此internet explorer(甚至11)之类的东西在这两个方面都会崩溃,因此您需要一个polyfill,请检查此链接,它将为您提供有关它的更多信息,并且为较旧的浏览器提供一个polyfill


希望对你有帮助是的。不仅回收状态是允许的,而且是推荐的

假设您的初始状态为:

{
  object1: { /* key-pair values */ },
  object2: { /* key-pair values */ },
}
如果您这样更新状态:

// bad
return {
  object1: action.object1,
  object2: Object.assign({}, state.object2),
}
然后你的应用程序会认为
object2
已经改变,即使它没有改变。这可能会导致不必要的计算,并在React组件中重新渲染

最好只更新状态中实际发生变化的部分

// good
return Object.assign({}, state, {
  object1: action.object1,
});

请注意,我的问题不是如何创建对象的副本,而是reducer是否可以将旧状态的属性(即对象或数组)作为新状态的属性返回。这并没有改变旧的状态,但它会在某种程度上回收旧的状态。
// good
return Object.assign({}, state, {
  object1: action.object1,
});