🟨

Next.jsにおけるstateの仕組み

2024/04/19に公開

Next.jsにおけるstateは、コンポーネント内でデータを保持し、その変化を反映させるための重要な仕組みです。コンポーネントの内部状態を管理することで、動的なUIを実現したり、ユーザー入力に応じた処理を実行したりすることができます。

stateの種類

Next.jsでは、主に以下の2種類のstateが利用できます。

  • ローカルstate: 特定のコンポーネント内でのみ保持されるstateです。他のコンポーネントからは直接アクセスできません。
  • グローバルstate: アプリケーション全体で共有されるstateです。どのコンポーネントからもアクセスして更新することができます。

stateの管理方法

stateは、主に以下の2つの方法で管理することができます。

  • useStateフック: 関数コンポーネント内でstateを定義・管理するためのフックです。最も一般的なstate管理方法です。
  • useReducerフック: 複雑なstate管理や副作用処理に適したフックです。useStateフックよりも高度な機能を提供します。

useStateフックの使い方

useStateフックは、以下の手順で利用することができます。

  1. useStateフックを呼び出し、初期state値を指定します。
  2. 返される配列の最初の要素は、現在のstate値です。
  3. 2番目の要素は、stateを更新するための関数です。
const [count, setCount] = useState(0);

// ...

<button onClick={() => setCount(count + 1)}>カウントアップ</button>
<p>カウント: {count}</p>

useReducerフックの使い方

useReducerフックは、以下の手順で利用することができます。

  1. useReducerフックを呼び出し、reducer関数と初期state値を指定します。
  2. 返される配列の最初の要素は、現在のstate値です。
  3. 2番目の要素は、stateを更新するためのdispatch関数です。
const reducer = (state, action) => {
  switch (action.type) {
    case 'increment':
      return { count: state.count + 1 };
    case 'decrement':
      return { count: state.count - 1 };
    default:
      return state;
  }
};

const [state, dispatch] = useReducer(reducer, { count: 0 });

// ...

<button onClick={() => dispatch({ type: 'increment' })}>カウントアップ</button>
<button onClick={() => dispatch({ type: 'decrement' })}>カウントダウン</button>
<p>カウント: {state.count}</p>

その他

  • Next.jsでは、getStaticPropsgetServerSidePropsなどの特別な関数を使用して、コンポーネントの初回レンダリング時にstateを初期化することができます。
  • stateは、コンポーネントの再レンダリングをトリガーする重要な役割を果たします。stateが変更されると、コンポーネントは再レンダリングされ、最新の状態を反映します。

Discussion