Reactで、フォームの二重送信を防ぐ方法
送信ボタンを続けて押しても、注文が1件だけ作られるようにする方法です。送信中にボタンを無効にする書き方、refで止める書き方、formのactionの場合と、サーバー側でIdempotency-Keyを使う方法を確かめました。 ...
Reactで、外側をクリックしたら閉じるカスタムフックの作り方
メニューやドロップダウンを、外側をクリックしたら閉じるカスタムフックを TypeScript で作りました。開くボタンを内側に入れる理由、click ではなく pointerdown を待つ理由、ポータルの中の扱い、タッチ操作での動き ...
Reactで画像を遅延読み込みし、読み込み中の表示を出す方法
React で img に loading=”lazy” を付けて遅延読み込みし、onLoad と onError で読み込み中の表示を出す方法です。width・height、key での作り直し、ハイドレーシ ...
react-markdownでMarkdownを安全に表示する方法
react-markdownは、何も設定しなければMarkdownの中のHTMLを文字のまま表示し、javascript:のリンクも消します。rehype-sanitizeの置き場所と、HTMLを使わないときの設定を確かめました。
Reactのinert属性で、モーダルの後ろを操作できなくする方法
自作のモーダルを開いている間、後ろの画面を包む要素に inert を付けると、Tab キーのフォーカスもクリックも届かなくなり、アクセシビリティツリーからも外れます。フォーカストラップを作るときは、後ろの画面へフォーカスが移らないよう ...
Reactで、未保存の変更があるときにページを離れる前に確認を出す方法
入力したまま保存していない内容を、うっかり捨てないための確認の出し方です。再読み込みやタブを閉じる操作はbeforeunloadで、アプリの中の画面移動はReact RouterのuseBlockerで止める方法を、検証環境で確かめま ...
ReactでServer-Sent Eventsの通知を受け取る方法
ReactでServer-Sent Eventsの通知を受け取る方法です。名前付きイベントの受け取り方、つなぎ直しとLast-Event-IDでの取りこぼし防止、同じオリジンへの接続が6本で止まる制限を検証環境で確かめました。 ...
ReactでBroadcastChannelを使い、ほかのタブと状態をそろえる方法
同じサイトを複数のタブで開いているとき、片方のタブで変えた状態を、BroadcastChannelでほかのタブにも反映する方法です。チャンネルを閉じ忘れたときの動きや、あとから開いたタブに値を渡す方法を、検証環境で確かめました。
Reactで、入力が止まるまで検索を待つカスタムフックの作り方
入力しながら結果が出る検索欄に、デバウンスを入れるカスタムフックを TypeScript で作りました。サーバーへのリクエストが1件にまとまること、古い結果の取り消し、空欄や検索中の表示、日本語の変換中の扱いを、Chrome for ...
ReactでPopover APIを使い、メニューを表示する方法
ReactでPopover APIを使い、ボタンの下にメニューを出す方法です。ドロップダウンメニューを作るときに使えます。popoverとpopoverTargetを付けるだけで開閉でき、外側のクリックやEscで閉じます。項目を選んだ ...
