大家知道React Hook中存在依賴數(shù)組,它的存在是為了控制組件是否變化而需要重新渲染。那么它是怎么判斷這個(gè)依賴的值是否有變化的呢?
我發(fā)現(xiàn)沒有文檔介紹這個(gè)判斷count變化到底是怎么做的。所以我們只能自己在源碼里找了。下面的鏈接里可以找到areHookInputsEqual方法,
https://github.com/facebook/react/blob/v18.1.0/packages/react-reconciler/src/ReactFiberHooks.new.js#L323
這里就是判斷依賴是否相等源碼,原來它沒有使用==或===來判斷,而是使用了Object.is函數(shù), 我們都知道==和===的區(qū)別,那為什么用Object.is呢?以下來自MDN,里面說三種相等比較模式,嚴(yán)格相等(===),非嚴(yán)格相等(==),同值相等(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不會(huì)做深比較,它只是比較它們是否是相同的對(duì)象。===和Object.is在對(duì)象比較上都是一樣的結(jié)果。