2
3

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で非同期処理を書く (ステップ4)

Last updated at Posted at 2019-06-28

はじめに

前ステップから続き、勉強用のuseFetchを書いていきます。今回のテーマはエラー処理です。

課題

これまではURLが固定でしたが、URLを変えた場合エラーになる可能性があります。また、URLを変えなくてもネットワークエラーは起こり得ます。エラー処理を追加して、エラー時にその旨を表示するなどできるようにします。

ステップ4: error処理

const useFetch = url => {
  const [result, setResult] = useState({});
  useEffect(() => {
    let cleanedUp = false;
    const fetchData = async () => {
      try {
        const response = await fetch(url);
        if (!response.ok) throw new Error(`status: ${response.status}`);
        const data = await response.json();
        if (!cleanedUp) {
          setResult({ data });
        }
      } catch (error) {
        if (!cleanedUp) {
          setResult({ error });
        }
      }
    };
    setResult({ loading: true });
    fetchData();
    const cleanup = () => {
      cleanedUp = true;
    };
    return cleanup;
  }, [url]);
  return result;
};

少し複雑になってきました。try-catchでエラーを取得するとともに response.ok もチェックしてエラー扱いにしています。

動作確認

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

おわりに

本コードは勉強用ですので、そのままでは使わないでください。(ちゃんとした実装はこちら)
さらなる課題と解決は次のステップへ。

2
3
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
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?