使用传播或解构获取反应状态对象

Posted

技术标签:

【中文标题】使用传播或解构获取反应状态对象【英文标题】:Getting react state objects using spread or destructuring 【发布时间】:2020-12-15 21:19:57 【问题描述】:

似乎有一个更可取的理由来传播而不是解构,但我不明白为什么。当然,在编写/阅读代码时,解构更容易且代码更少,但有些教程似乎更喜欢传播,但在这些示例中,它们似乎并没有从状态中提取 2 个或更多项。写起来很奇怪:

let obj1 = ...this.state.obj1;
let obj2 = ...this.state.obj2;
let obj3 = ...this.state.obj3;

当这里变得如此干净时

let obj1,obj2,obj3 = this.state;

这是假设我打算在获得这些值后做这样的事情

obj1.foo = "bar";
obj1.baz = "qux";
obj2.foo = "bar";
obj3.foo = "baz";
this.setState(obj1,obj2,obj3);

为什么一个比另一个更好,如果分散更可取,有没有办法让代码更干净?

【问题讨论】:

但在这些示例中,他们似乎并没有从状态中提取 2 个或更多项目我会称那些糟糕的教程,IMO 传播实际上给了你整个状态对象。而在解构中,您将特定的 obj 分配给与 定义的相同变量名。两者都有不同的用例。他们不相似 @MeetZaveri 抱歉,我写错了展开语法。我的意思是包括每个单独对象的传播。 ...this.state.obj1 而不是 ...this.state 【参考方案1】:

很遗憾,我无法在这里得到答案。感谢 Reddit,我现在可以回答这个问题了。

Spread 创建一个浅拷贝。解构会创建一个引用,这会导致状态直接发生变异。从状态拉回状态时始终使用传播。仅用于从状态读取时,解构很好。

【讨论】:

以上是关于使用传播或解构获取反应状态对象的主要内容,如果未能解决你的问题,请参考以下文章

javascript firebase创建对象状态反应传播运算符

传播解构以避免重复

表值在反应中没有变化

JavaScript中 对象解构详解

JavaScript中 对象解构详解

JavaScript中 对象解构详解