useIsomorphicLayoutEffect
useLayoutEffect 會在服務端渲染的時候發出警告,所以我們在服務端用 useEffect 進行替代。 詳情可見 Alex Reardon’s article 的文章
useIsomorphicLayoutEffect 在瀏覽器環境中使用 useLayoutEffect,在伺服器端使用 useEffect。這解決了 React 在 SSR 期間對 useLayoutEffect 產生的警告,同時仍在客戶端獲得同步佈局 effect 的好處。
使用場景
- 在需要 SSR 相容的元件中使用
useLayoutEffect - 建構需要在瀏覽器繪製前同步讀取或修改 DOM 的 SSR 安全元件
- 作為函式庫作者建立跨環境安全的 effect hooks
注意事項
- 自動環境偵測:在伺服器上使用
useEffect,在瀏覽器中使用useLayoutEffect,無需手動判斷。 - React 警告:直接在 SSR 中使用
useLayoutEffect會產生 React 警告。此 hook 消除了該警告。 - 相關 hooks:另請參閱
useUpdateLayoutEffect用於跳過初始渲染的佈局 effect,以及useOnceLayoutEffect用於僅執行一次的佈局 effect。
Usage
Live Editor
function Demo() { const [value] = useState("useIsomorphicLayoutEffect"); useIsomorphicLayoutEffect(() => { window.console.log(value); }, [value]); return <div>{value}</div>; };
Result