3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ta1m1kamが一人で書くAdvent Calendar 2022

Day 22

ReactHooksについてまとめる(Performance Hooks useDeferredValue)

Last updated at Posted at 2022-12-21

概要

ReactHooksのPerformance Hooksについてのメモ記事です。基本的にReactの公式ドキュメントの咀嚼記事となっています。

今回はuseDeferredValue編です。

useDeferredValue

新しいコンテンツがロードされているときに古いコンテンツが表示される

UIの一部の更新を遅延させるために、コンポーネントのトップレベルでuseDeferredValueを呼び出します。

例を見たほうがわかりやすいので、一気に例から見てみます。

この例では、検索結果を取得する際に、useStateの更新関数のsetQueryによって、Suspenceが発火し、Loading...が表示するようにfallbackされます。

このコード内で、useDeferredValueを使用して、クエリの遅延の際に、古い結果を表示させるようにします。

export default function App() {
  const [query, setQuery] = useState('');
  const deferredQuery = useDeferredValue(query);
  return (
    <>
      <label>
        Search albums:
        <input value={query} onChange={e => setQuery(e.target.value)} />
      </label>
      <Suspense fallback={<h2>Loading...</h2>}>
        <SearchResults query={deferredQuery} />
      </Suspense>
    </>
  );
}

クエリはすぐに更新されるので、入力には新しい値が表示されます。しかし、deferredQuery はデータがロードされるまで以前の値を保持するので、SearchResults は少しの間、古い結果を表示します。

下の例で "a" と入力し、結果がロードされるのを待ってから、入力を "ab" に編集してください。サスペンスのフォールバックではなく、新しい結果が読み込まれるまでの間、古い結果のリストが表示されることがわかります。

参考

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?