useEffect で非同期にする方法

useEffect を使用して非同期タスクをクリーンかつ安全に実行する

APIを呼び出してタイムアウト遅延を設定することから、React フックを使用するときにそれを適切に行う方法をすでに疑問に思っていると思いますuseEffect。それがまだぼやけているように聞こえる場合は、この記事が役に立ちます。そうでない場合は、少なくとも仕事を成し遂げるための別のアプローチを学ぶか、仕事をしているときに自信を持てるようになるかもしれません.

安全できれいに行うための3つの方法を紹介します。しかし、最初に、してはいけないことを示したいと思います。

してはいけないこと❌

非同期タスクを useEffect で直接実行しないでください。代わりに、常に非同期タスクを関数にラップし、useEffect からのみ呼び出します。

してはいけないことの例を次に示します。

useEffect(async () => {
   await getData();
},[]);

また、この BAD の例が示すように実行すると、React エラーが発生します。

効果のコールバックは、競合状態を防ぐために同期されます。

よし、これで安心してグッドプラクティスに進むことができます ⬇️

1. フック内で async 関数を定義する

非同期タスクを実行する場合、たとえば API からデータを取得し、コンポーネントの読み込み状態を更新する場合は、フック内で関数を定義して呼び出す必要があります。

useEffect(() => {
async function getData() {
    setLoading(false);
    const reponse = await myApi.getSomeGoodData()
    setLoading(true);
   }
getData();
},[]);

2. フックの外で async 関数を定義する

定義した非同期関数を再利用する場合は、関数コンポーネント本体で定義し、useCallbackフックでラップすることをお勧めします。見てみな:

const getData = useCallback(() => {
    setLoading(false);
    const reponse = await myApi.getSomeGoodData()
    setLoading(true);
}, [])
useEffect(() => {
getData()
},[getData])

3. 間隔またはタイムアウトの設定

前の 2 つの例は、主にデータの取得とコンポーネントの状態の更新に焦点を当てていました。これは、間隔またはタイムアウトを設定している useEffect 内の非同期タスクの一般的なシナリオも示すことです。

そのための秘訣は、で設定されたタイムアウトと間隔を常にクリアするuseEffectことです。

タイムアウトの設定

useEffect(() => {
const timeout = setTimeout(() => {
     // do something
   }, 100)
return () => {
      clearTimeout(timeout);
   }
},[])

useEffect(() => {
const interval = setInterval(() => {
       // do something
  }, 100)
return () => {
      clearInterval(interval);
  }
},[])

上記の例は、React の開発中に遭遇する可能性のある非同期の状況の 99.99% をカバーします。効果の依存関係に注意することを忘れないでください。以下の例であなたのケースが見つからない場合は、コメントをドロップしてください。調査します。

読んでくれてありがとう

—-フェルナンド・アボラフィオ

提案された投稿

ドメイン名に関する情報の検索

Brian P. Hogan 著『Small, Sharp Software Tools』からの抜粋

ドメイン名に関する情報の検索

facebook.com にリクエストを送信すると、コンピュータはドメイン名を検索してそのドメイン名を IP アドレスに変換し、コンピュータが接続できるようにします。

技術的な背景がなくてもサイバーセキュリティに移行するためのヒント。

技術的な背景がなくてもサイバーセキュリティに移行するためのヒント。

2022 年に、私は非技術職からサイバーセキュリティの職に転職しました。私はドイツ語で最初の学位を取得しました 、あなたがショックを受け、私がどのようにしてドイツ語への移行に成功したかに興味を持っているのはわかりますが、それはたまたまです。

関連記事

一部のフリーランサーが自分の人生を偽っている理由

一部のフリーランサーが自分の人生を偽っている理由

私は最近、世界最大のプロフェッショナルなソーシャル ネットワークである Linkedin を利用していて、フォローしているフリーランス デザイナーの注目を集めた投稿を見つけました。彼らはすべて、飛行機からの写真、ラップトップを持ってビーチで撮影した写真、スイミング プールやオフィスから素晴らしい景色を眺めた写真を投稿していました。

カウボーイの嘘

巨大企業はいかにしてアメリカ国民にひどい嘘を売ったのか

カウボーイの嘘

西のなだらかな丘陵地帯では、太陽の最初の光が平原の曇った草を照らす、まばゆいばかりの金色の朝です。真っ黒で巨大な穏やかなアンガス牛の群れが日の出を背景にシルエットを描き、誰もがよく知っている場所へ人里離れた道を進んでいます。朝食バー。

ジョーダン・ニーリー殺害と「愛国的」人種差別の問題

米国は、人種差別的な行動と善良な米国人であることを同一視しないという重要な一歩を踏み出すことができるだろうか?

ジョーダン・ニーリー殺害と「愛国的」人種差別の問題

[警告: このエッセイには、ジョーダン ニーリー殺害の犯人を賞賛する人々のスクリーンショットが含まれています。] 法執行当局はついに、そしておそらくはしぶしぶではありましたが、ジョーダン ニーリーを死ぬまで首を絞めた男、ダニエル ペニーをその殺人罪で起訴しました。

「マリアナ海溝の公開: 深淵の恐るべき隠された真実を明らかにする」

「マリアナ海溝の公開: 深淵の恐るべき隠された真実を明らかにする」

はじめに:勇敢な読者の皆さん、地球の最も暗い深みへ私たちを導く旅へようこそ。このブログでは、マリアナ海溝の謎に満ちた世界を掘り下げ、その隠された秘密を明らかにし、その表面の下にある骨も凍るような真実を明らかにします。