跳到主要內容

React 18 轉換

React 18 提供一個新 hook useTransition(),用於轉換到新狀態,同時控制在新狀態準備就緒之前要呈現的內容。反作用力應該與此方法相容,並提供與 React 狀態一致的檢視畫面。然而,React 18 可能回退到同時更新,目前還不正式支援基於狀態變更到外部儲存所引發的轉換。這是 React 團隊正在研究支援的功能,但在此之前,已透過以下 hook 新增此功能的實驗性支援;其他 hook 應該已經完全支援轉換,因此僅需要這些變異。此 API 被視為實驗性的,因為我們可能尚未找到未處理的用例。

  • useRecoilState_TRANSITION_SUPPORT_UNSTABLE()
  • useRecoilValue_TRANSITION_SUPPORT_UNSTABLE()
  • useRecoilValueLoadable_TRANSITION_SUPPORT_UNSTABLE()

以下是一個範例,用於顯示查詢的目前結果,同時載入新的結果。

function QueryResults() {
const queryParams = useRecoilValue_TRANSITION_SUPPORT_UNSTABLE(queryParamsAtom);
const results = useRecoilValue_TRANSITION_SUPPORT_UNSTABLE(myQuerySelector(queryParams));
return results;
}

function MyApp() {
const [queryParams, setQueryParams] = useRecoilState_TRANSITION_SUPPORT_UNSTABLE(queryParamsAtom);
const [inTransition, startTransition] = useTransition();
return (
<div>
{inTransition ? <div>[Loading new results...]</div> : null}

Results: <React.Suspense><QueryResults /></React.Suspense>

<button
onClick={() => {
startTransition(() => {
setQueryParams(...new params...);
});
}
>
Start New Query
</button>
</div>
);
}