「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > React レンダー関数でデータを非同期にフェッチする方法

React レンダー関数でデータを非同期にフェッチする方法

2024 年 10 月 31 日公開
ブラウズ:502

How to Asynchronously Fetch Data in React Render Functions

React レンダー関数で async/await を使用する方法

React では、レンダー関数は通常、純粋な同期操作を目的としています。ただし、特定のシナリオでは、この関数内で非同期タスクを実行する必要が生じる場合があります。この記事では、render 関数で async/await 構文を効果的に使用する方法について説明します。

問題を理解する

質問で強調されているように、async/ を使用しようとしていることがわかります。 render 関数の Map 関数内で直接 await を実行すると、予期しない動作が発生する可能性があります。これは、マップ関数が同期操作を想定しており、マップ関数内で非同期呼び出しを実行しようとすると、レンダリング プロセスのフローが中断される可能性があるためです。

データの取得と表示の分離

この問題を解決するには、データ取得プロセスを表示ロジックから分離することをお勧めします。レンダリング関数内で非同期操作を実行する代わりに、別のコンポーネントまたはフックでデータのフェッチを開始する方が適切です。

親コンポーネントでの非同期データのフェッチ

このアプローチでは、非同期リクエストの作成とデータの管理を担当する親コンポーネント (ParentThatFetches など) を作成します。ライフサイクル メソッドまたはフックを利用して、親コンポーネントはデータをフェッチし、それを状態に保存します。その後、親コンポーネントは、フェッチされたデータを props として受け取る純粋な機能的な子コンポーネント (例: Child) を条件付きでレンダリングします。 ]

this.state = {};


}

componentDidMount () {
this.state = {};
fetch('/some/async/data') .then(resp => resp.json()) .then(data => this.setState({data}));

}

render () {
this.state = {};
{this.state.data && ( )}

}

}

{this.state.data && (
  <Child data={this.state.data} />
)}


{data.map((x, i) => (

{x}))}


);
this.state = {};

フックを使用したデータのフェッチ


React でのフックの出現により、データのフェッチをさらに簡素化できます。次のコード スニペットは、フックを使用してデータを非同期にフェッチし、それに応じて状態を更新する方法を示しています。
useEffect(() => {

const getData = async () => { const resp = await fetch('some/url'); const json = await resp.json() updateData(json); } getData();

}, []);

データを返す &&
}

リリースステートメント この記事は次の場所に転載されています: 1729236261 侵害がある場合は、[email protected] に連絡して削除してください。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3