0514
LOGS
React Suspense
の復習- https://ja.react.dev/reference/react/Suspense
fallback
は React ノードであれば何でも受け付ける- 実際にはローディングスピナやスケルトンだろう
children
がサスペンドしたら<Suspense>
は fallback に切り替わる- fallback 自体がレンダー中にサスペンドしたら,親のサスペンスバウンダリのうち最も近いものがアクティブになる.なるほど.
- 逆に,初回マウント前にレンダリングされた UI は消える.一切の
state
は保持しないから. <Suspense>
が再度サスペンドしたら,もちろん再度 fallback が表示されるchildren
すべてのコードとデータが読み込まれるまでただし,それが
startTransition
またはuseDeferredValue
によって引き起こされた場合は除くstartTransition
- UI をブロックせずに state を更新できるもの
startTransition(scope)
と書くscope
最低1個set()
関数を呼び出して state を更新する関数startTransition(() => { setHoge(nextHoge); });
- 要は
useState
といっしょに使うイメージ?
- この更新はノンブロッキングになり,ローディングインジケーターは表示しない
- トランジションが
pending
であるかどうかを知るための方法を提供しないのか…- 知りたいなら,代わりに
useTransition
が必要となる - scope は即座に実行されるので,非同期関数は渡せない
- 他にも注意事項がたくさんあるのでドキュメントを見る
- 知りたいなら,代わりに
- レスポンスなし
useDeferredValue
UI の一部の更新を遅延させるための React フックuseDeferredValue(value, initialValue?)
と書く ```js import { useState, useDeferredValue } from 'react';
function SearchPage() { const [query, setQuery] = useState(''); const deferredQuery = useDeferredValue(query); // ... } ```
value
遅延させたい値.任意の型.initialValue
名前の通り初期値- 省略すると,前のバージョンの value が存在しないので,遅延しない
- 戻り値は更新後の値.初回は,与えた初期値がそのまま返ってくる
- また,
children
のどれか1つでもデータ待ちでサスペンドしていたら fallback が表示され,すべてが揃ったら一斉にレンダリングされるとな - 他にも,いろんな非同期処理や状態ごとに見た目や処理を変えるケースが公式サイトに載っているので,都度必要に応じたら見るということで,一旦ここでストップ
- ChatGPT 4o が出たので早速 p5.js のコードをいくつか書かせてみている *