【发布时间】:2019-02-07 00:04:08
【问题描述】:
假设我有变量“state”和“newState”。我想创建一个纯函数,它返回使用“newState”的属性(和子属性)更新的“状态”。这是一个例子:
const state = {id:1, name:'aName', description: 'aDescription'};
const newState = {id:1, name:'newName', subItems: {id:3, type:'whatever'}};
函数将返回:
{id:1, name:'newName', subItems: {id:3, type:'whatever'}}
我可以使用其余参数,但我不知道如何追加而不是覆盖。我不能只循环属性,因为我希望函数是纯的(redux reducer)。
有人有什么想法吗?
【问题讨论】:
-
对于任何值得通用 ES6 模式的东西,您都会看到
this.setState({...this.state, ...updates})其中更新是任何更改。这实际上只是语法糖,基本上是 Object.assign,但在我看来它有助于清晰。看看 redux 教程。你问的基本上是redux的本质。 redux.js.org/api/store。至于你的函数问题:纯函数只是意味着输出总是与相同的输入相同,并且输入没有改变或->Object.assign({}, oldObj, newObj) -
@DanielB.Chapman 奇怪的是,当我使用 rest/spread 语法并覆盖原始对象的值时,所以当我在上面的示例中使用 rest 时,它缺少描述。跨度>
-
"函数会返回:{ ... }" - 为什么
description没有出现在预期的输出中?
标签: javascript reactjs redux functional-programming