网站首页 > 技术文章 正文
大家知道React Hook中存在依赖数组,它的存在是为了控制组件是否变化而需要重新渲染。那么它是怎么判断这个依赖的值是否有变化的呢?
我发现没有文档介绍这个判断count变化到底是怎么做的。所以我们只能自己在源码里找了。下面的链接里可以找到areHookInputsEqual方法,
https://github.com/facebook/react/blob/v18.1.0/packages/react-reconciler/src/ReactFiberHooks.new.js#L323
这里就是判断依赖是否相等源码,原来它没有使用==或===来判断,而是使用了Object.is函数, 我们都知道==和===的区别,那为什么用Object.is呢?以下来自MDN,里面说三种相等比较模式,严格相等(===),非严格相等(==),同值相等(Object.is)
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Equality_comparisons_and_sameness#a_model_for_understanding_equality_comparisons
例如:
- +0, -0 and 0 :===返回相等, Object.is 返回不等。可能Object.is就是为了数学上的正确性?
- NaN === NaN : Object.is 相等, === 不等, 这应该就是相同值的正确性
所以这就是React选择了Object.is的原因。
另外,React不会做深比较,它只是比较它们是否是相同的对象。===和Object.is在对象比较上都是一样的结果。
- 上一篇: js检测数据类型方法总结
- 下一篇: 由浅入深,带你用JavaScript实现响应式原理
猜你喜欢
- 2024-11-26 深入学习下 null 和 undefined 区别
- 2024-11-26 Javascript ES6新引入的类型Symbol详解以及示例
- 2024-11-26 深入浅出讲解JS中this/apply/call/bind巧妙用法【实践】
- 2024-11-26 一个菜鸟的攻坚系列——__proto__和prototype
- 2024-11-26 NaN你都未必懂,花五分钟让你懂得不能再懂
- 2024-11-26 理解JavaScript中的This,Bind,Call和Apply
- 2024-11-26 Javascript应用-基本类型和引用类型对前端的影响你要了解
- 2024-11-26 JavaScript 基础语法 02
- 2024-11-26 深入探究:null 和 undefined 究竟有何区别?
- 2024-11-26 Js基础1:基本概念
- 标签列表
-
- content-disposition (47)
- nth-child (56)
- math.pow (44)
- 原型和原型链 (63)
- canvas mdn (36)
- css @media (49)
- promise mdn (39)
- readasdataurl (52)
- if-modified-since (49)
- css ::after (50)
- border-image-slice (40)
- flex mdn (37)
- .join (41)
- function.apply (60)
- input type number (64)
- weakmap (62)
- js arguments (45)
- js delete方法 (61)
- blob type (44)
- math.max.apply (51)
- js (44)
- firefox 3 (47)
- cssbox-sizing (52)
- js删除 (49)
- js for continue (56)
- 最新留言
-