useSyncExternalStoreで、Reactの外にあるストアを安全に読む方法
React の外にあるストアを useSyncExternalStore で読むと、Transition の描画中にストアが変わっても、画面の値がそろいます。useEffect で購読する書き方と比べ、3つの引数の落とし穴も確かめまし ...
VitestとTesting LibraryでReact 19のコンポーネントをテストする方法
React 19 のコンポーネントを、Vitest と React Testing Library でテストする手順です。後片づけの登録、findBy での待ち方、Suspense を使うコンポーネントを await act で描画す ...
TanStack QueryとReact 19の新機能をどう使い分けるか
React 19 の use と Suspense は「待つ表示」、useActionState は「送信中の状態」を受け持ちますが、データのキャッシュは受け持ちません。自前のキャッシュと TanStack Query で同じ画面を作 ...
ReactのuseTransitionで、前の画面を残したまま読み込みを待つ方法
タブの切り替えで表示中の画面がSuspenseの「読み込み中…」に置き換わるのは、startTransitionで防げます。isPendingで切り替え中を示す方法、入れ子のSuspenseで待つ範囲を決める方法、keyで読み込み中に ...
React 19で、formのactionに関数を渡して送信する方法
React 19のに渡した関数は、FormDataを受け取って呼ばれます。useFormStatusで子のボタンから送信中を読む方法と、同じコンポーネントで呼ぶと効かない落とし穴を確かめました。
ReactのActivityで、隠した画面の状態を残す方法
条件付きレンダリングの代わりにで隠すと、stateも入力欄の中身も残ったまま、エフェクトだけが片付けられます。2つの書き方を同じ手順で動かして比べ、隠しても止まらないへの対処も確かめました。
React 19で、forwardRefを使わずにrefを受け取る方法
React 19では ref をふつうの props として受け取れるので、新しいコンポーネントに forwardRef はいりません。同じコードを React 18 と 19 で動かし、memo や TypeScript の型での違 ...
React 19のuseでPromiseとコンテキストを読む方法
React 19のuseなら、Promiseとコンテキストを描画中に読めます。待ち時間はSuspense、失敗はError Boundaryに任せられ、コンテキストはifのあとでも読めます。キャッシュしないPromiseを渡すとどうな ...
ReactのuseActionStateとuseOptimisticでフォーム送信を書き直す方法
onSubmitとuseStateのフォーム送信を、React 19のuseActionStateとに書き直し、useOptimisticで送った内容をすぐ表示しました。エラーで入力欄が空になる落とし穴と、その避け方も確かめました。
ReactのuseEffectEventでエフェクトをやり直さずに最新の値を読む方法
useEffectEventを使うと、エフェクトの中で最新のpropsやstateを読みながら、その値が変わってもエフェクトをやり直さずに済みます。依存配列に入れる、lintを黙らせる、useEffectEventを使う、の3通りで、 ...
