Reactの関数コンポーネントでは、useEffectフックを使用することで、副作用の処理を行うことができます。副作用とは、コンポーネントがレンダリングされた際に発生する、状態の変更やAPI通信などの処理のことです。今回は、useEffectフックで副作用を処理する方法について解説します。

useEffectフックとは

useEffectフックは、関数コンポーネント内で副作用を実行するために使用されます。このフックは、第一引数にコールバック関数を受け取ります。このコールバック関数は、コンポーネントが初期化された際に一度だけ実行されます。また、useEffectフックは、第二引数に依存配列を受け取ることができます。この依存配列に指定された変数が変更された場合に、再度コールバック関数が実行されます。

useEffectフックでの副作用の処理方法

useEffectフックを使用することで、以下のような副作用を処理することができます。

状態の変更

コンポーネントがレンダリングされた際に、状態を変更する処理を行うことができます。例えば、以下のようなコードで、ボタンがクリックされた際に、countの状態を1増やすことができます。

import React, { useState, useEffect } from 'react';

function Example() {
  const [count, setCount] = useState(0);

  useEffect(() => {
    document.title = `You clicked ${count} times`;
  }, [count]);

  return (
    <div>
      <p>You clicked {count} times</p>
      <button onClick={() => setCount(count + 1)}>
        Click me
      </button>
    </div>
  );
}

このコードでは、useEffectフック内で、document.titleを更新しています。この処理は、countの状態が変更された際に実行されます。

API通信

コンポーネントがレンダリングされた際に、API通信を行う処理を行うことができます。例えば、以下のようなコードで、GitHub APIからユーザー情報を取得することができます。

import React, { useState, useEffect } from 'react';

function Example({ userId }) {
  const [user, setUser] = useState(null);

  useEffect(() => {
    async function fetchUser() {
      const response = await fetch(`https://api.github.com/users/${userId}`);
      const data = await response.json();
      setUser(data);
    }

    fetchUser();
  }, [userId]);

  if (!user) {
    return <div>Loading...</div>;
  }

  return (
    <div>
      <p>{user.name}</p>
      <p>{user.bio}</p>
    </div>
  );
}

このコードでは、useEffectフック内で、fetchUser関数を実行しています。この処理は、userIdの値が変更された際に実行されます。また、ユーザー情報を取得するまで、”Loading…”という文字列を表示しています。

イベントリスナーの登録・解除

コンポーネントがレンダリングされた際に、イベントリスナーを登録・解除する処理を行うことができます。例えば、以下のようなコードで、マウスがクリックされた際に、コンポーネント内の要素を非表示にすることができます。

import React, { useState, useEffect } from 'react';

function Example() {
  const [isVisible, setIsVisible] = useState(true);

  useEffect(() => {
    function handleClick() {
      setIsVisible(false);
    }

    document.addEventListener('click', handleClick);

    return () => {
      document.removeEventListener('click', handleClick);
    };
  }, []);

  return (
    <div style={{ display: isVisible ? 'block' : 'none' }}>
      Click anywhere to hide this element
    </div>
  );
}

このコードでは、useEffectフック内で、addEventListenerとremoveEventListenerを使用して、clickイベントのリスナーを登録・解除しています。また、依存配列に空の配列を指定することで、コンポーネントが初期化された際にのみ、一度だけ実行されるようにしています。

まとめ

useEffectフックを使用することで、関数コンポーネント内で副作用の処理を行うことができます。状態の変更やAPI通信、イベントリスナーの登録・解除など、様々な副作用を処理することができます。しかし、useEffectフックを使用する際には、無限ループを防ぐために、依存配列を適切に設定する必要があります。

投稿者 admin

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です