フックを使用した React Render 関数で Async Await を使用する方法

Susan Sarandon
リリース: 2024-10-18 15:27:03
オリジナル
208 人が閲覧しました

How to Use Async Await in React Render Function with Hooks

React レンダー関数の非同期待機

問題の理解

コード内では、レンダー関数のマップ関数内で async await を使用しようとします。ただし、非同期関数はレンダリング関数で直接使用できないため、このアプローチは無効です。 React のレンダリング関数は同期コードを想定しています。

正しいアプローチ

レンダリング関数内で非同期操作を使用するには、次の 2 つのアプローチのいずれかに従うことができます:

1.データ フェッチとコンポーネントの分離

データ フェッチ ロジックを、非同期操作を処理する別個のコンポーネントに分離します。次に、データが利用可能な場合にのみ UI コンポーネントを条件付きでレンダリングします。

class ParentComponent extends React.Component {
  constructor() {
    this.state = { data: null };
  }

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

  render() {
    return this.state.data ? <Child data={this.state.data} /> : null;
  }
}

const Child = ({ data }) => (
  <table>
    <tbody>
      {data.map((x, i) => (
        <tr key={i}>
          {x.map((y, j) => <td key={j}>{y}</td>)}
        </tr>
      ))}
    </tbody>
  </table>
);
ログイン後にコピー

2.非同期効果のあるフック

非同期操作を管理するには React フックを使用します。

const ParentComponent = () => {
  const [data, setData] = useState(null);

  useEffect(() => {
    const getData = async () => {
      const resp = await fetch("/some/async/data");
      const json = await resp.json();
      setData(json);
    };
    getData();
  }, []);

  return data ? <Child data={data} /> : null;
};
ログイン後にコピー

追加メモ

  • の使用例の座標は、実際の経度と緯度の値に置き換えることができます。
  • データ レコードに一意の識別子がある場合は、配列インデックスの代わりにキー属性にそれらの識別子を使用します。

以上がフックを使用した React Render 関数で Async Await を使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート