当前位置: 首页 > news >正文

WHAT - React useEffect 依赖的 Object.is

目录

  • 一、背景
  • 二、Object.is 的语法
  • 三、Object.is 的行为
  • 四、总结

一、背景

在 https://react.dev/reference/react/useEffect 中我们了解到:

React will compare each dependency with its previous value using the Object.is comparison.

接下来我们学习一下 Object.is 。Object.is 是 JavaScript 中的一个静态方法,用于比较两个值是否相同。它与 === 运算符的行为略有不同,尤其在处理特殊值(比如 NaN-0)时表现更为准确和可预测。

二、Object.is 的语法

Object.is(value1, value2)
  • value1:第一个要比较的值。
  • value2:第二个要比较的值。

三、Object.is 的行为

  1. 基本用法

    Object.is(1, 1);     // true
    Object.is(1, '1');   // false
    Object.is('foo', 'foo'); // true
    
    • Object.is 类似于严格相等运算符 ===,但是处理一些特殊情况时有所不同。
  2. 处理特殊值

    Object.is(NaN, NaN);   // true
    Object.is(0, -0);      // false
    Object.is(-0, -0);     // true
    
    • NaN 是 JavaScript 中特殊的非数值(Not-a-Number)。
    • -00 被视为不同的值,尽管它们在一般的数值比较中是相等的。
  3. 与严格相等运算符 === 的区别

    NaN === NaN;   // false
    0 === -0;      // true
    -0 === -0;     // true
    
    • === 运算符在比较 NaN-0 时的结果与 Object.is 不同。
  4. 在 React 中的应用

    React 使用 Object.is 来进行依赖项比较。在函数组件的 useEffectuseMemo 钩子中,React 会比较依赖项的前一个值和当前值,以决定是否重新计算或执行相关的效果。

    useEffect(() => {// Effect code
    }, [dependency1, dependency2]);
    
    • 在上述例子中,React 将使用 Object.is 比较 dependency1dependency2 的前一个值和当前值。如果值不同(使用 Object.is 的定义),则重新运行 useEffect 中的代码。

四、总结

Object.is 是 JavaScript 中用于比较两个值是否严格相等的方法,它在处理特殊值(如 NaN-0)时与 === 运算符有所不同。在 React 中,React Hooks 如 useEffectuseMemo 使用 Object.is 来确定依赖项是否发生变化,从而决定是否重新执行相关的效果或计算。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【C语言】指针(1):入门理解篇
  • Docker 部署 OpenVPN 与 OpenVPN 基本用法
  • CTFShow的RE题(二)
  • Gradient Descent
  • windows下编译ffmpeg 最详细教程
  • 加装德国进口高精度主轴 智能手机壳「高质量高效率」钻孔铣槽
  • Unity之创建与导出PDF
  • 第一次面试的经历(java开发实习生)
  • IPSS模块怎么安装到VOS服务器的,到底有没有效果,是不是能大幅度提升VOS3000安全性呢
  • pdfplumber vs PyMuPDF:PDF文本、图像和表格识别的比较
  • Python面试题:在 Python 中,如何处理异常?
  • 开发个人Go-ChatGPT--1 项目介绍
  • 简单分享下python多态
  • idea Git操作
  • 使用antd的<Form/>组件获取富文本编辑器输入的数据
  • 07.Android之多媒体问题
  • AngularJS指令开发(1)——参数详解
  • ECMAScript入门(七)--Module语法
  • fetch 从初识到应用
  • interface和setter,getter
  • Java精华积累:初学者都应该搞懂的问题
  • PHP 的 SAPI 是个什么东西
  • socket.io+express实现聊天室的思考(三)
  • tab.js分享及浏览器兼容性问题汇总
  • UMLCHINA 首席专家潘加宇鼎力推荐
  • Webpack 4 学习01(基础配置)
  • webpack入门学习手记(二)
  • 阿里云前端周刊 - 第 26 期
  • 事件委托的小应用
  • 问:在指定的JSON数据中(最外层是数组)根据指定条件拿到匹配到的结果
  • 小程序button引导用户授权
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • MiKTeX could not find the script engine ‘perl.exe‘ which is required to execute ‘latexmk‘.
  • 国内开源镜像站点
  • ​ubuntu下安装kvm虚拟机
  • ‌移动管家手机智能控制汽车系统
  • #pragma once与条件编译
  • #每日一题合集#牛客JZ23-JZ33
  • (160)时序收敛--->(10)时序收敛十
  • (a /b)*c的值
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (windows2012共享文件夹和防火墙设置
  • (第二周)效能测试
  • (附源码)计算机毕业设计ssm-Java网名推荐系统
  • (六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题
  • (论文阅读31/100)Stacked hourglass networks for human pose estimation
  • (牛客腾讯思维编程题)编码编码分组打印下标(java 版本+ C版本)
  • (七)glDrawArry绘制
  • (算法)大数的进制转换
  • (五)IO流之ByteArrayInput/OutputStream
  • (原)本想说脏话,奈何已放下
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • (转)菜鸟学数据库(三)——存储过程