大家知道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
例如:
所以这就是React选择了Object.is的原因。
另外,React不会做深比较,它只是比较它们是否是相同的对象。===和Object.is在对象比较上都是一样的结果。