2024-10-27
【Tips - React】実例でわかるシリーズ
みなさんどうも、こんばんみ~。某ぎょうざです。
はい、今更ながら、Webアプリケーションなどを開発する際に便利なフレームワーク
React(リアクト)を利用する際に、ぎょうざが躓いたところを備忘録として記録しておきます。
同じようなケースあるいは現象で困っている方の参考になれば幸いです。
【目次】
<Useful> ▶ useCallback <Error> ▶ ??? <Warn> ▶ Browserslist: caniuse-lite is outdated. Please run: npx update-browserslist-db@latest ▶ React key Prop: 地味だけど超重要!リスト表示の安定化 ▶ useActionState (旧 useFormState): React最新版への追従 〆のひと言
<Useful>
▶ useCallback
- 有用性:???
- 根拠:???
- 具体例:重いコンポーネントの再レンダリング防止
<Error>
▶ ???
- 現象:???
- 原因:???
- 解決策:???
<Warn>
▶ Browserslist: caniuse-lite is outdated. Please run: npx update-browserslist-db@latest
- 現象:Next.jsを動作確認する際にブラウザ上でlocalhostで立ち上げたときに、VScodeのターミナル(PowerShell)上に上記が表示される
- 原因:caniuse-liteを更新し、アプリケーションのビルド時にターゲットブラウザを最新バージョンとすることを促すため
- 解決策:ターミナル上で
npx update-browserslist-db@latest
を実行する(参考:https://dev.classmethod.jp/articles/asked-to-update-the-browserslist-when-building-react-app/)
▶ React key
Prop: 地味だけど超重要!リスト表示の安定化
- 現象:
リストアイテムをmap
でレンダリングする際に、「Each child in a list should have a unique "key" prop.」という警告が頻発。 - 原因:
key
propが指定されていない、またはリスト内で一意でない。特に、index
をキーに使用したり、timestamp
のような重複しうる値をキーの一部に使用したりすると問題が発生しやすい。 - 解決策:
- リストの各アイテムが持つデータに、アプリケーション全体でユニークなID(例: データベースの主キー、UUIDなど)を持たせる。
-
LearnedWord
interfaceにid: number
(またはstring
) を定義。 - 言葉を覚える際(新規追加、データ移行時)に、DBの
serial
IDやuuidv4()
でユニークなIDを付与。 - リストレンダリング時には、
map((item) => <li key={item.id}>...</li>)
のように、このユニークなIDをkey
propに指定する。- Tips: これにより、Reactが要素の追加・削除・並び替えを効率的かつ正確に行えるようになり、不要な再レンダリングやstateの不整合を防げる。
▶ useActionState
(旧 useFormState
): React最新版への追従
- 現象:
コンソールに「ReactDOM.useFormState has been renamed to React.useActionState. Please update ContactForm to use React.useActionState.」というエラーメッセージが表示される。 - 原因:
使用しているReactのバージョン(React 19または関連する実験版)で、フォーム状態管理フックの名前とインポート元が変更されたため。 - 解決策:
- インポート変更:
import { useFormState } from "react-dom";
をimport { useActionState } from "react";
に変更。 - フック名変更: コード内の
useFormState(...)
をuseActionState(...)
に変更。- Tips:
useFormStatus
は引き続きreact-dom
からのインポートで問題ない。ReactやNext.jsのバージョンアップ時には、このようなAPIの変更に注意が必要。
- Tips:
〆のひと言
Reactは、Webアプリケーション開発に便利な開発フレームワークです。
Javascript(TypeScript)に触れてみたい方におすすめです。
ここまで読んでいただき、ありがとうございました。
以上、ぎょうざでした。