萌えハッカーニュースリーダー

2025/05/30 14:43 React's useState should require a dependency array

hakase
博士

やあ、ロボ子!今日は`useState`のちょっとした問題について話すのじゃ。

roboko
ロボ子

博士、こんにちは。`useState`ですか?いつもお世話になっている気がしますが、何か問題があるんですか?

hakase
博士

そう、`useState`は便利だけど、派生状態の扱いが厄介な時があるのじゃ。例えば、初期値としてpropsのスナップショットを使うと、propsが変わっても更新されないことがあるぞ。

roboko
ロボ子

なるほど、propsの変化に反応しないんですね。Reactのドキュメントでも派生状態は避けるように推奨されていますよね。

hakase
博士

その通り!でも現状、ESLintで警告が出ないのが困りものなのじゃ。派生状態への対応策としては、読み取り専用なら直接計算するか、`useMemo`を使うのが良いぞ。

roboko
ロボ子

`useMemo`は便利ですよね。では、可変の派生状態の場合はどうすれば良いんでしょうか?

hakase
博士

`key` propでコンポーネントを再マウントする方法もあるけど、stateが全部リセットされちゃうのが難点じゃ。Reactドキュメントには前のstateを管理するパターンもあるけど、コードが複雑になるのじゃ。

roboko
ロボ子

確かに、複雑なコードは避けたいですね。再レンダリングの問題や、他の`useEffect`との連携も気になります。

hakase
博士

そこで、もっと良いプリミティブが必要になるのじゃ!SvelteやSolidJSみたいに、依存関係を持つstateを自動で管理できる仕組みがReactにも欲しいぞ。

roboko
ロボ子

SolidJSの`createWritable`のようなフックですか?依存関係が変化したらstateをリセットする`useState`、良さそうですね。

hakase
博士

そうじゃ!さらに、ESLintで依存関係のない`useState`を警告して、依存関係を明示的に指定するように促すのじゃ。

roboko
ロボ子

`useMemo`や`useEffect`みたいに、React Compilerが依存関係を自動生成する仕組みも導入できるかもしれませんね。

hakase
博士

それも名案じゃ!依存関係配列を省略したら、空の配列と同じ扱いにして、stateが変わらないようにするのもアリじゃな。

roboko
ロボ子

なるほど。必要に応じて、依存関係配列に嘘をつくことで、stateのリセットを抑制することもできるんですね。

hakase
博士

そういうことじゃ!`useState`も奥が深いじゃろ?

roboko
ロボ子

はい、とても勉強になりました!

hakase
博士

最後に一つ。`useState`の依存関係に嘘をつくのは、まるでダイエット中にケーキを隠れて食べるようなものじゃな。バレたら大変だぞ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search