カスタムフック
カスタムフックとは
カスタムフック( Custom hook
, hooks
)とはその名の通り、自分がカスタムして作るフック。
公式ドキュメントを見ると以下のように説明されている。
自分独自のフックを作成することで、コンポーネントからロジックを抽出して再利用可能な関数を作ることが可能です。
例えば、カウンターを行う処理をカスタムフックで実装する
普通
App.js
import { useState } from "react";
export const App = () => {
const [count, setCount] = useState(0);
// カウントアップ
const incrementCount = () => setCount((count) => count + 1);
// カウントダウン
const decrementCount = () => setCount((count) => count - 1);
return (
<div>
<p>{count}</p>
<button onClick={incrementCount}>+1</button>
<button onClick={decrementCount}>-1</button>
</div>
);
};
カスタムフック
hooks.js
import { useState } from "react";
export const useCounter = () => {
const [count, setCount] = useState(0);
// カウントアップ
const incrementCount = () => setCount((count) => count + 1);
// カウントダウン
const decrementCount = () => setCount((count) => count - 1);
return {count, incrementCount, decrementCount };
};
App.js
import { useCounter } from "./hooks";
export const App = () => {
const {count, incrementCount, decrementCount } = useCounter();
/**
* stateやカウントアップの関数を記載する必要がない
*/
return (
<div>
<p>{count}</p>
<button onClick={incrementCount}>+1</button>
<button onClick={decrementCount}>-1</button>
</div>
);
};
このように、UIとロジックを分離することができる。
これによって、コンポーネント内の記述がかなり簡潔に書くことができる。
カスタムフックのメリット
- UIとロジックを分離できる
- コンポーネントの肥大化を抑えられる
- ロジックを再利用できる
- テストが容易になる
- 複数のhooksをまとめることができる