【React.js/Next.js】React Hooks useReducer 完全入門

React.js / Next.js

React Hooks の useReducer ってどんな機能があるの?

今回は、React Hooks の中でも重要な useReducer について、基本的な考え方から使い方、代表的なユースケースまでをわかりやすく解説します。

useReducer とは?

useReducer とは、複数の状態を持つコンポーネント において、複雑なstateの更新処理を reducer関数に集約し、コンポーネントの外に分離して管理するための Hooks です。

useReducerdispatch を通して state の更新内容を reducer に伝え、reducer は受け取った内容をもとに、新しい state を返す。

コード例

カウント

処理フロー

  1. +2” ボタンを クリック
  2. countUp = () => dispatch({ type: ‘up’, step: 2 }) が呼ばれる
  3. reducercase ‘up’ が実行され、{count: state.count + action.step } が return される
  4. カウント: が “+2” ずつ カウントアップ される
  5. -1” ボタンを クリック
  6. countDown = () => dispatch({ type: ‘down’, step: -1 }) が呼ばれる
  7. reducercase ‘down’ が実行され、{count: state.count + action.step } が return される
  8. カウント: が “-1” ずつ カウントダウン される
  9. stay” ボタンをクリック
  10. countStay = () => dispatch({ type: ‘stay’ }); が呼ばれる
  11. reducer の ‘stay‘ が case に該当しないため、default が実行され、今の state がそのまま return される
  12. カウント: の 値は変わらない
  13. リセット” ボタンをクリック
  14. countReset = () => dispatch({ type: ‘reset’, init: initialState }); が呼ばれる
  15. reducercase ‘reset’ が実行され、action.init が return される
  16. カウント: が 初期値の 0 に戻される

Todo List

処理フロー

  1. addTodoButton” のログが表示される
  2. Todo追加 ボタンをクリックし、”todo1”を入力し、OK をクリック
  3. addTodoButton” と “MemoRemoveTodoButton: 0” のログが表示され、todo1削除 ボタンが 追加 される
  4. Todo追加 ボタンをクリックし、”todo2”を入力し、OK をクリック
  5. addTodoButton” と “MemoRemoveTodoButton: 1” のログが表示され、todo2削除 ボタンが 追加 される
  6. todo2削除 ボタンをクリックする
  7. removeTodo” と “addTodoButton” と のログが表示され、todo2削除 ボタンが 削除 される
  8. todo1削除 ボタンをクリックする
  9. removeTodo” と “addTodoButton” と のログが表示され、todo1削除 ボタンが 削除 される
  • removeTodouseCallback でメモ化し、MemoRemoveTodoButtonmemo 化することで、 不要な子コンポーネントTodo の削除ボタン再レンダリングされるのを防ぐ ことができる

まとめ

React Hooks の useReducer について、いかがでしたでしょうか?

useReducer は、複数の状態を持つコンポーネント において、複雑なstateの更新処理を reducer関数に集約し、コンポーネントの外に分離して管理するための Hooks で、状態遷移 や更新ルールが明確な処理 に向いています。

なお、単純な state の管理では、無理に useReducer を使わず、useState を選ぶ方が実装もシンプルになりおすすめです。

まずは基本的な使い方をしっかり押さえ、Todoリスト などの小さな コンポーネント から試しながら、少しずつ useReducer に慣れていきましょう。

公式サイト

useReducer

tachu × tachu

Laravel / React フルスタックエンジニア

Webエンジニア歴15年、フリーランス歴8年で、PHP / Laravel を中心に、
React.js / Vue.js を用いたフルスタックでのWeb開発をしています。

技術記事は Laravel / React / Web開発 を中心に書いています。

Webサービスの開発、既存システム改善、機能追加、技術相談、小規模な開発など、お気軽にご相談ください。

React.js / Next.js
シェアする

コメント

タイトルとURLをコピーしました