[英]React hooks call setState with same primitive value still cause re-render
我發現當我定義一個值為“1”的 state 時,
並在每次單擊按鈕時將 state 的值設置為“2”,
前兩次將導致重新渲染
重現演示: https://codesandbox.io/s/sweet-brattain-ys11d
代碼:使用沒有嚴格模式的 react@17
import { useState } from "react";
export default function App() {
const [a, setA] = useState("1");
console.log("render", a);
return (
<button
onClick={() => {
setA("2");
}}
>
{a}
</button>
);
}
// log:
// render 1
// render 2
// render 2
我可以理解第一次重新渲染,因為 state 從“1”更改為“2”,
但我不明白第二次重新渲染
我認為這很好地解釋了異常:
如果您將 State Hook 更新為與當前 state 相同的值,React 將在不渲染子節點或觸發效果的情況下退出。 (React 使用 Object.is 比較算法。)
請注意,React 可能仍需要在退出之前再次渲染該特定組件。 這不應該是一個問題,因為 React 不會不必要地 go “深入”到樹中。 如果您在渲染時進行昂貴的計算,您可以使用 useMemo 對其進行優化
注意最后一段。 這是直接從這里引用的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.