はじめに
useEffect
でasync
を使おうとした際にうまく動作しなかったため、その原因と正しい使い方について調べました。
この記事は個人的なアウトプットを目的として作成したものです。そのため、誤った情報や不足している内容が含まれている可能性があります。もし間違いや気になる点がございましたら、ぜひご指摘いただけますと幸いです。
事象
useEffect
で非同期関数を実行しようと、以下のようなコードを書きましたが、正常にデータを取得できませんでした。
useEffect(async () => {
const data = await fetchData(import.meta.env.VITE_ISSUE_ID);
console.log(data);
},[]);
原因
useEffect
のコールバック関数はPromise
を返してしまうと、React
がそれを正しく処理できず、エラーが発生します。useEffect
のコールバック関数はクリーンアップ関数を返す必要があり、直接async
を付けることができません。
解決方法
async
をuseEffect
のコールバック関数につけるのではなく、内部でasync
関数を定義して実行することで、正常にデータを取得できました。
useEffect(() => {
const fetchDataAsync = async () => {
const data = await fetchData(import.meta.env.VITE_ISSUE_ID);
console.log(data);
};
fetchDataAsync();
}, []);
終わりに
今回のエラーを通じて、非同期処理についての理解が不十分であることを実感しました。今後は async/await
の仕組みやPromise
の動作をより深く理解し、適切なコードを書けるようにしていきたいと思います
参考
『useEffectに非同期関数を設定する方法』Zenn
『useEffectで非同期処理(async/ await)する際の注意点』Qiita