React useState設(shè)置相同的值,為什么會render兩次?

const [value, setValue] = React.useState(0);

  const onClick = () => {
    setValue(1);
  };

  console.log(`render`, value);

  return (
    // <div onClick={onClick}>click {Math.random()}</div>
    <div onClick={onClick}>click</div>
  );

首先我們來看這段代碼,value的初始值是0,點擊按鈕將該值設(shè)置成1。首先這段代碼會打印出// render 0 ; 隨后我們點擊按鈕兩次。輸出結(jié)果如下:

// render 0
// render 1
// render 1

看到上邊的結(jié)果是不是很意外,當(dāng)我們第一次點擊按鈕的時候 value的值已經(jīng)變成了1, 第二次點擊按鈕的時候?qū)alue的值還是設(shè)置成1, 那么前后的值是不是沒有變化,理論上來講是不是不應(yīng)該打印出 render 1。

針對這個問題研究了很久,知道我在官網(wǎng)上仔細的看到了這句話

image.png

需要注意的是,React 可能仍需要在跳過渲染前渲染該組件。不過由于 React 不會對組件樹的“深層”節(jié)點進行不必要的渲染,所以大可不必擔(dān)心。如果你在渲染期間執(zhí)行了高開銷的計算,則可以使用 useMemo 來進行優(yōu)化。

那么我試了一下給DOM中添加了個隨機數(shù),發(fā)現(xiàn)確實是在第二次點擊的時候隨機數(shù)并沒有變化。說明確實是沒有再一次的觸發(fā)re-render

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容