ようこそ、React Hooks Advent Calendar 2019へ!まずは1日目ということで、React Hooksの魅力について語ってみます。
React Hooksの魅力
関数コンポーネントでも広がる機能性
もともとReactのコンポーネントはクラスコンポーネントしかなく、そしてrender
だけで済むものが関数コンポーネントで書けるようになりました。ただ、関数コンポーネントを拡張していって、state
などが必要になると、改めてクラスコンポーネントに書き換える必要が出てしまいました1。
React Hooksでは、関数コンポーネントのまま、state
や更新時のフックを実現できるようになります。
カスタムフックによるモジュール化
クラスコンポーネントでは、クラス内部にcomponentDidMount
やcomponentDidUnmount
といったコールバックは1つしか作れなかったので、前準備と後始末を分けて書くしかない、ということがありました。
React Hooksでは、コールバック類をいくつでも書けます。さらに、複数のHooksをまとめて呼び出すカスタムフックを作ることで、準備と後片付けをまとめて再利用することも可能としています。
粒度の細かな制御
クラスコンポーネントには、全体をメモ化して、props
やstate
が変化しない限り再描画を抑える機能があります。また、componentDidUpdate
は更新のたびに実行されます。
React Hooksの場合、useMemo
を使えば「特定の変数群が変わらない限り」という条件でメモ化ができますし、useEffect
でも同様に「特定の変数群の変化」をきっかけとしてコールバックを実行できます。
-
React 16.12時点でも、
componentDidCatch
やgetSnapshotBeforeUpdate
といった一部のコールバックは関数コンポーネントで再現できません。 ↩