> 웹 프론트엔드 > JS 튜토리얼 > React Render 함수에서 비동기 호출을 효과적으로 사용하는 방법은 무엇입니까?

React Render 함수에서 비동기 호출을 효과적으로 사용하는 방법은 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-10-18 15:30:29
원래의
360명이 탐색했습니다.

How to Effectively Use Asynchronous Calls in React Render Functions?

React 렌더링 함수에서 Async/Await 사용: 대체 접근 방식

비동기 프로그래밍은 React 애플리케이션에서 자주 발생하며, 특히 외부 작업을 처리할 때 더욱 그렇습니다. 데이터 소스. 그러나 React의 렌더링 함수 내에서 직접 async 및 wait를 사용하면 예상치 못한 결과가 발생할 수 있습니다.

React에 비동기 호출을 효과적으로 통합하기 위한 일반적인 접근 방식은 상태 관리 기술을 활용하는 것입니다. 여기에는 componentDidMount와 같은 별도의 수명 주기 방법으로 데이터를 가져오거나 useEffect와 같은 후크를 사용하여 데이터를 사용할 수 있게 되면 상태를 업데이트하는 작업이 포함됩니다.

다음 예를 고려하세요.

<code class="javascript">class ParentThatFetches 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 }) => (
  <tr key={index}>
    {data.map((x, i) => (
      <td key={i}>{x}</td>
    ))}
  </tr>
);</code>
로그인 후 복사

In 이 접근 방식에서는 ParentThatFetches 구성 요소가 데이터를 비동기식으로 가져오고 그에 따라 상태를 업데이트합니다. 데이터를 사용할 수 있게 되면 데이터를 표시하는 하위 구성 요소를 렌더링합니다.

대체 접근 방식: 서버 측 구성 요소

React 18에 도입된 React 서버 구성 요소 , React 애플리케이션에서 비동기 데이터를 처리하기 위한 또 다른 접근 방식을 제공합니다. 기존 클라이언트 측 렌더링 모델과 달리 React 서버 구성 요소는 서버에서 렌더링되므로 HTML이 클라이언트에 전송되기 전에 데이터를 가져와 처리할 수 있습니다.

다음은 React 서버 구성 요소를 활용하는 업데이트된 예입니다.

<code class="javascript">import Geocode from "react-geocode";
import _ from "lodash-es";

const getAddressData = async (getCompanyUserRidesData = []) =>
  Promise.all(
    getCompanyUserRidesData.map(async (userRides) => {
      const addr = await Geocode.fromLatLng(22.685131, 75.873468);
      const address = addr.results[0].formatted_address;
      const email = _.get(userRides, "driverId.email", "");
      const mobile = _.get(userRides, "driverId.mobile", "");
      return { address, email, mobile };
    })
  );

async function GeoServerComponent({ phase, getCompanyUserRidesData }) {
  const data = await getAddressData(getCompanyUserRidesData);
  return (
    <table>
      <tbody>
        {data.map(({ address, email, mobile }, index) => (
          <tr key={index}>
            <td>{address}</td>
            <td>Goa</td>
            <td>asdsad</td>
            <td>{email}</td>
            <td>{mobile}</td>
          </tr>
        ))}
      </tbody>
    </table>
  );
}</code>
로그인 후 복사

이 예에서 getAddressData 함수는 서버에서 비동기적으로 주소를 가져옵니다. 그런 다음 GeoServerComponent 함수는 주소를 props로 수신하고 서버에 필요한 HTML을 렌더링합니다. 이 접근 방식을 사용하면 HTML이 클라이언트에 전송되기 전에 데이터가 준비되어 렌더링 기능에서 직접 async 및 Wait를 사용할 때 발생하는 문제를 해결할 수 있습니다.

위 내용은 React Render 함수에서 비동기 호출을 효과적으로 사용하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿