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

React入門 練習問題 53:フック:状態の初期化手法

Reactの`useState`フックにおいて、初期値に直接値を渡すのではなく「初期値を計算して返す関数」を渡す手法(遅延初期化)を用いる主な目的として正しいものはどれか。

  1. 初期値の計算コストが高い場合、初回描画時のみ計算を実行してパフォーマンスの低下を防ぐため。
  2. コンポーネントが再描画されるたびに、常に最新の乱数や現在時刻を初期値として再計算するため。
  3. 非同期通信でサーバーから取得したデータを、自動的に初期値として設定する処理を簡略化するため。
  4. 親コンポーネントから渡されたPropsの値が変更された際に、自動的に状態をリセットするため。
  5. 状態の更新が失敗した場合に、自動的に前の状態へロールバック(復元)する機能を持たせるため。
正解と解説を見る
正解:初期値の計算コストが高い場合、初回描画時のみ計算を実行してパフォーマンスの低下を防ぐため。

`useState`の初期値に関数を渡す「遅延初期化(Lazy initialization)」は、計算コストが高い初期化処理を初回レンダリング時のみ実行させ、再レンダリング時の無駄な計算を防ぐための機能です。

【正解の理由】
`useState(heavyFunction())` と書くと再描画のたびに `heavyFunction` が実行されてしまいますが、`useState(() => heavyFunction())` のように関数を渡すことで、Reactは最初の1回だけその関数を実行し、以降は無視するためパフォーマンスが向上します。

【不正解の理由】
• 「コンポーネントが再描画されるたびに、常に最新の乱数や現在時刻を初期値として再計算するため」という説明は誤り。遅延初期化は再計算を防ぐための機能です。
• 「非同期通信でサーバーから取得したデータを、自動的に初期値として設定する処理を簡略化するため」という説明は誤り。非同期通信の結果を直接useStateの初期値に関数として渡すことはできません(非同期処理はuseEffect等で行います)。
• 「親コンポーネントから渡されたPropsの値が変更された際に、自動的に状態をリセットするため」という説明は誤り。Propsの変更による自動リセット機能はありません。
• 「状態の更新が失敗した場合に、自動的に前の状態へロールバック(復元)する機能を持たせるため」という説明は誤り。そのような機能はuseStateには含まれていません。

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