当前位置: 首页 > 知识库问答 >
问题:

浅比较工作中如何反应

锺离逸春
2023-03-14

在React的这篇文档中,据说

shallowCompare对current props和nextProps对象以及current state和nextState对象执行浅层相等性检查。

我无法理解的是,如果它简单地比较了对象,那么componentupdate方法应该总是返回true,就像

如果我们没有改变状态,那么比较将始终返回false,因此shouldComponent更新将始终返回true。我很困惑它是如何工作的,以及我们将如何克服这一点来提高性能。

共有1个答案

邹胜泫
2023-03-14

浅比较检查是否相等。当比较标量值(数字、字符串)时,它会比较它们的值。当比较对象时,它不比较它们的属性--只比较它们的引用(例如,“它们指向同一个对象吗?”)。

让我们考虑以下User对象的形状

user = {
  name: "John",
  surname: "Doe"
}

例1:

const user = this.state.user;
user.name = "Jane";

console.log(user === this.state.user); // true

注意您更改了用户名。即使有了这种变化,对象也是相等的。引用完全一样。

例2:

const user = clone(this.state.user);
console.log(user === this.state.user); // false

现在,如果不对对象属性进行任何更改,它们就完全不同了。通过克隆原始对象,可以创建一个具有不同引用的新副本。

克隆函数可能如下所示(ES6语法)

const clone = obj => Object.assign({}, ...obj);

浅比较是检测变化的有效方法。它希望你不要变异数据。

 类似资料:
  • 问题内容: 在此 React 文档中,据说 shallowCompare对当前props和nextProps对象以及当前状态和nextState对象执行浅层相等性检查。 我无法理解的是,如果它浅浅地比较对象,则shouldComponentUpdate方法将始终返回true,因为 我们不应该改变国家。 如果我们不改变状态,则比较将始终返回false,因此shouldComponent更新将始终返回

  • 我指的是这个博客上列出的代码:https://strstr.io/Leetcode1054-Distant-Barcodes/ 我在这里复制这段代码 我试图理解的代码在这里 我从这段代码中得到的是是用

  • 问题内容: 我一直在阅读编程书,作者展示了一个类似的示例: 所以,我想知道为什么为什么等于假?如何比较这两个元组? 顺便说一句,这本书没有解释。 问题答案: 比较元组的位置:将第一元组的第一项与第二元组的第一项进行比较;如果它们不相等(即第一个大于或小于第二个),则这是比较的结果,否则将考虑第二个,然后是第三个,依此类推。 请参阅常见序列操作: 相同类型的序列也支持比较。特别是,通过比较相应的元素

  • 问题内容: 使用两个概念:CAS和变量。 使用变量可确保当前值对所有线程可见,并且不会被缓存。 但是我对以下解释的CAS(compare AND set)概念感到困惑: 我的问题是什么回报?值不会更新吗?在这种情况下,当线程执行以下情况时会发生什么: 问题答案: 原子对象利用Compare和Swap机制使它们成为原子- 即可以保证该值 是 指定的 ,并且现在 是新值。 您发布的代码不断尝试将当前值

  • 问题内容: 用于比较的Python文档说: 可以任意链接比较,例如与等效,不同之处在于比较仅被评估一次(但在两种情况下都被发现为假,则根本不评估)。 所以像(人为的例子): 只要求输入一次。这很有道理。和这个: 仅询问 是否 介于1和10之间,并且仅打印“ woo!”。 if 也在10到20之间(证明它们可以“任意链接”)。这也是有道理的。 但是我仍然很好奇在lexer / parser / co

  • 为什么React中shouldComponentUpdata,React.memo这些使用浅比较,而是===