カスタムフックス

カスタムフックスとは、コンポーネントのロジック部分を切り出し関数化する手法です。カスタムフックスを使うことで、ロジックを分けることができ、同じロジックを別のところで使い回すことができます。

src配下にhooksディレクトリを作成しましょう。その中にusePostList.tsを作成しましょう。カスタムフックスの命名は基本的にuse~としましょう。usePostList.ts内にはusePostListという関数を定義しましょう。

usePostList.ts◎
export const usePostList = () => {}

この関数の中に、PostList.tsxのロジック部分を移行しましょう。

usePostList.ts◎
import axios from "axios";
import { useEffect, useState } from "react";

type Post = {
  id: number;
  userId: number;
  title: string;
  body: string;
};

export const usePostList = () => {
  const [postList, setPostList] = useState<Post[]>([]);
  const [userId, setUserId] = useState(1);
  const [errorMessage, setErrorMessage] = useState("");

  useEffect(() => {
    axios
      .get<Post[]>("https://jsonplaceholder.typicode.com/posts")
      .then((res) => {
        setPostList(res.data);
      })
      .catch((e) => {
        setErrorMessage(e.message);
      });
  }, []);
};

そして、この関数の返却値として、PostList.tsxで使用するstateや関数を返却するようにします。

上記にて作成したフックスを呼び出します。上記を呼び出すには、const { ... } = usePostList()と呼び出すことで、stateや関数を取得することができます。

ですので、PostList.tsxのロジック部分と不要なインポートを削除して、usePostList()を呼び出します。最終的には以下のような形になります。

このようにロジックを別ファイルに切り出すことで、コンポーネントがスッキリするかと思います。

Last updated