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