8
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[勉強用] React hooksで非同期処理を書く (ステップ1)

Last updated at Posted at 2019-06-26

はじめに

以前の記事で、useFetchの実装を紹介しましたが、もう少し単純なバージョンを順を追って書いていきたいと思います。

例題

非同期処理には色々ありますが、一番よく使われるであろうデータ取得を例にします。
https://reqres.in/api/user/1?delay=1
からダミーのユーザデータを取得するとします。
delayを指定するとデータ取得を遅延させることができます。

ステップ1: 最低限の実装

const useFetch = url => {
  const [result, setResult] = useState({});
  useEffect(() => {
    const fetchData = async () => {
      const response = await fetch(url);
      const data = await response.json();
      setResult({ data });
    };
    fetchData();
  }, [url]);
  return result;
};

一つのポイントは、async関数をそのままuseEffectに渡さないことです。戻り値がpromiseになるので、useEffectが怒ります。参考

もう一つのポイントは、useEffectの第二引数(deps)に [url] を渡すことです。この非同期処理はurlに依存するためです。urlが変わると再度処理が走ります。eslintのexhaustive-depsルールを有効にすると簡単に検知できます。

動作確認

実際に動くコードはこちらです。codesandbox

おわりに

本コードは勉強用ですので、そのままでは使わないでください。
課題と解決は次のステップへ。

8
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?