Qraft(クラフト) 資格・学習クイズアプリ

React入門 練習問題 66:状態管理(派生状態の扱い)

📊 Qraftユーザーの成績

  • 難易度 Bランク(レーティング1200)
  • 難易度 766位/2795問中
  • 正答率 —(0回)
レーティングは解いた人の実力と正誤から算出する難しさ(初期値1200)。ランクはその全問題中の順位(S+が最難関、F-が最易)

Reactで、既存のState(例:商品の価格と個数)から計算できる値(例:合計金額)を扱う場合の推奨されるアプローチとして、正しいものはどれか。

  1. 新たなStateを作らず、レンダリング時に既存のStateから直接計算して変数に代入する。
  2. 合計金額用の新しいStateを作り、価格や個数が変わるたびに useEffect で更新する。
  3. コンポーネントの外部にグローバル変数を定義し、価格や個数が変わった際にその変数へ代入する。
  4. 計算結果をブラウザのLocalStorageに保存し、画面に表示する際はそこから読み出して使う。
  5. 合計金額を計算するための専用の子コンポーネントを必ず作成し、そこにPropsとして計算式を渡す。
正解と解説を見る
正解:新たなStateを作らず、レンダリング時に既存のStateから直接計算して変数に代入する。

既存のStateから計算できる値(派生状態)は、新たなStateを作らず、レンダリング時に既存のStateから直接計算して変数に代入するのが正解です。

【正解の理由】
Reactにおいて、State(=コンポーネントが保持する状態)は最小限に保つのが原則です。「価格」と「個数」というStateがあれば「合計金額」はレンダリングのたびに `const total = price * quantity;` のように計算できます。これを独立したStateにすると、元の値と同期がズレるバグの原因になります。

【不正解の理由】
• 「合計金額用の新しいStateを作り、価格や個数が変わるたびに useEffect で更新する。」という説明は誤り(useEffectを使って派生状態を同期すると、無駄な再レンダリングが発生しパフォーマンスが悪化するため推奨されない)
• 「コンポーネントの外部にグローバル変数を定義し、価格や個数が変わった際にその変数へ代入する。」という説明は誤り(ReactはStateやPropsの変更を検知して画面を更新するため、外部の変数を書き換えても画面に反映されないため)
• 「計算結果をブラウザのLocalStorageに保存し、画面に表示する際はそこから読み出して使う。」という説明は誤り(LocalStorageは永続化のための仕組みであり、コンポーネント内の通常のデータ計算の置き場所としては不適切であるため)
• 「合計金額を計算するための専用の子コンポーネントを必ず作成し、そこにPropsとして計算式を渡す。」という説明は誤り(計算自体は同じコンポーネント内の通常の変数として処理すればよく、必ずしもコンポーネントを分ける必要はないため)

← 前の問題問題一覧次の問題 →
アプリで解いてレーティングを上げる(無料・登録不要)