Next.js 13 - Jotai 的 useHydrateAtoms 掛鉤導致 UI 不匹配
P粉548512637
P粉548512637 2023-08-29 15:28:26
0
1
633
<p>使用新的應用程式目錄和 jotai 作為全域狀態管理器來處理 Next.js 13 專案。現在我嘗試使用 <code>useHydrateAtoms</code> 掛鉤將初始狀態傳遞給我的原子,如官方文件所示,但這會導致水合錯誤。 </p> <p>以下是目前使用的程式碼的簡化版本,它將從伺服器端元件接收到的資料傳遞到呼叫<code>useHydrateAtoms</code> 的客戶端元件,並使用<code>useAtom</code> 的客戶端元件,並使用<code>useAtom</code> 的客戶端元件,並使用<code>useAtom</ code> 從該原子讀取和寫入。 </p> <h5>伺服器元件(頁)</h5> <pre class="brush:php;toolbar:false;">const getData = async () => { // ... } export default async function Page() { const data = await getData(); return <ChildComponent initialState={data} />; }</pre> <h5>客戶端組件</h5> <pre class="brush:php;toolbar:false;">"use client"; export function ChildComponent({ initialState }) { useHydrateAtoms([[myAtom, initialState]]); const [data, setData] = useAtom(myAtom); return <>{data.id}</>; }</pre> <p>當我使用<code>next/dynamic</code> 動態導入子組件並將SSR 選項設為false 或刪除<code>useHydrateAtoms</code> 掛鉤時,錯誤完全消失,但這兩兩點種解決方案都違背了此實現的目的。 </ p> <p>如何使用來自伺服器的值向我的原子提供初始狀態,以便原子在第一次客戶端渲染時不是 <code>null</code> ? </p>
P粉548512637
P粉548512637

全部回覆(1)
P粉495955986

我發現useHydrateAtoms 鉤子本身並不是問題,它是一個客戶端元件,它存取透過next/dynamic 動態導入的UI 不同部分的狀態ssr 選項設定為false。這導致元件顯示的值在第一次渲染時發生變化,從而導致 UI 不匹配。

如何修復錯誤

只需將呼叫 useHydrateAtoms 的元件移到元件樹的頂部,這將確保所有子元件都將使用正確的值進行渲染。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!