Javascript 如何将对象的属性(在React中,而不仅仅是React)设置为一个线性?

Javascript 如何将对象的属性(在React中,而不仅仅是React)设置为一个线性?,javascript,reactjs,object,Javascript,Reactjs,Object,这真的很琐碎,但我正在寻找一个更喜欢的方式,似乎找不到它 我有一个物体,像这样: const input = { aaa: "bee", foo: "bar", fizz: "buz", (...) } 如何将其更改为: const input = { aaa: "bee", foo: "CHANGED", fizz: "buz", (...)

这真的很琐碎,但我正在寻找一个更喜欢的方式,似乎找不到它

我有一个物体,像这样:

const input = {
  aaa: "bee",
  foo: "bar",
  fizz: "buz",
  (...)
}
如何将其更改为:

const input = {
  aaa: "bee",
  foo: "CHANGED",
  fizz: "buz",
  (...)
}
不使用赋值,例如
input.foo=“CHANGED”


我正在React中设置一个状态,所以我想做一些类似于
setState(…input,foo:“CHANGED”)
的事情,但我不能使用
,因为它不是数组。我错过了什么?我要找的东西有没有优雅的方式?我需要地图吗?或者是否有一行程序?

您也可以在对象中使用

const[foo,setFoo]=useState({
酒吧:“例子”,
巴兹:“这将改变”
});
塞特福({
……福,
巴兹:“改变”
});

你要找的是

这也适用于对象

    const [testing, setTesting] = useState({a: 1, b: 2});

    setTesting({
        ...testing,
        a: 5
    });


Spread运算符可以,但请注意,这只会进行浅克隆

在React中设置状态时,如果您没有正确克隆对象,将创建一个令人头痛的世界

就个人而言,如果这不会使代码效率太低,我会在更改克隆对象之前对对象使用lodash deep clone,然后将其分配给状态

从“lodash”导入 //然后在类组件中 const nextState=u.cloneDeep(this.state.myObject) nextState.someKey=“someValue” this.setState({myObject:nextState}) 或者,您也可以创建自己的深度克隆功能,如下所示:

const input = {
  aaa: "bee",
  foo: "bar",
  fizz: "buz",
  (...)
}
constclonedeep=(obj)=>JSON.parse(JSON.stringify(obj))
虽然很明显,这不是很有效。我相信你不会注意到一个小州有什么不同


在我看来(我相信很多人会不同意),在我学习的时候,经历了错误地分配状态的困惑,我认为在分配状态之前,最好在所有东西上使用深度克隆函数。然后,当您对React更加熟悉后,请回来仔细了解扩展运算符的细微差别并正确分配状态。

TS在此处抛出一个错误:
Type'InputData'不是数组类型
。顺便说一句,我正在使用useState和钩子。我已经用useState钩子示例更新了答案。在我这边运行它没有问题,也没有TS错误。仔细检查您引用的变量是否正确。与“优雅”或“一行”相比,您更喜欢以易于阅读和维护的方式进行操作。我无法告诉你有多少个小时被浪费在追踪bug上,结果却发现这是因为有人决定变得聪明