ReactでuseRefを使ってCanvasのアニメーションを作る方法
Reactで、canvasの中のボールをrequestAnimationFrameで動かす方法です。canvasの要素とボールの位置をuseRefに持ち、useEffectで始めたループをcancelAnimationFrameで止め ...
Reactで日付を表示するとき、サーバーとブラウザのずれを防ぐ方法
Intl.DateTimeFormatで言語やタイムゾーンを省くと、サーバーとブラウザで日付の文字が変わり、ハイドレーションエラーになります。両方を指定する書き方と、閲覧者のタイムゾーンで出す書き方を検証環境で確かめました。
Reactでフォームの下書きをlocalStorageに保存する方法
お問い合わせフォームなどの入力をlocalStorageに自動保存し、再読み込みやタブを閉じたあとも下書きを戻す方法です。読み込みはuseStateの初期化関数、書き出しはuseEffectで行い、壊れた値や容量不足でも止まらない書き ...
ReactでHTMLのdialog要素を使い、モーダルを作る方法
dialog要素をshowModal()で開くと、Escキーで閉じる、後ろを操作できなくする、フォーカスを戻すといった処理をブラウザが受け持ちます。Reactのstateとずれないようにつなぐ書き方を、検証環境で確かめて紹介します。
ReactでWeb Workerを使い、重い計算中も入力を止めない方法
入力のたびに約200ミリ秒かかる計算を描画の中で呼ぶと、入力欄が止まります。計算を Web Worker に移すと入力欄は止まりません。Worker を1つ使い回すと結果が遅れることも確かめ、入力のたびに作り直して古い計算を止める書き ...
ReactでIntersectionObserverを使い、無限スクロールを作る方法
一覧の最後に目印の要素を置き、IntersectionObserver で見張ると、目印が見えたときに次のページを読み込めます。React の useEffect での書き方を確かめ、見張りを1回だけ作る書き方で起きる2つの失敗も調べ ...
Reactでreact-windowを使い、長い一覧を軽く表示する方法
1万件の一覧を map でそのまま描くと、DOM に1万行ができます。何万件もある一覧を仮想スクロールで軽く表示したいときは、見えている行とその前後だけを描く react-window の List が使えます。2.5.0 で DOM ...
Reactの自動バッチ処理でstateの更新がまとまる条件
React 18以降のcreateRootでは、setTimeoutやPromiseの中で続けて呼んだstateの更新も、1回の描画にまとめられます。React 17・18・19で描画の回数を数え、まとめられない書き方も確かめました。 ...
ReactのflushSyncで、stateの更新をすぐ画面に反映する方法
Reactでstateを更新した直後の行では、画面(DOM)はまだ古いままです。flushSyncで包むと、次の行に進む前に画面が更新されます。スクロールと印刷の例で確かめ、エフェクトの中で呼んだときの警告と描画の回数も調べました。
React 19でハイドレーションエラーの表示はどう変わったか
React 19では、サーバーのHTMLとブラウザの描画が食い違うと、エラーが1件にまとまり、どの部品のどの値が違うかが差分で出ます。同じ食い違いをReact 18と19で描き、出たエラーを並べて比べました。
