«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как эффективно использовать асинхронные вызовы в функциях рендеринга React?

Как эффективно использовать асинхронные вызовы в функциях рендеринга React?

Опубликовано 21 декабря 2024 г.
Просматривать:260

How to Effectively Use Asynchronous Calls in React Render Functions?

Использование Async/Await в функциях рендеринга React: альтернативный подход

Асинхронное программирование часто встречается в приложениях React, особенно при работе с внешними источники данных. Однако использование async и await непосредственно в функции рендеринга React может привести к неожиданным результатам.

Чтобы эффективно включить асинхронные вызовы в React, обычным подходом является использование методов управления состоянием. Это предполагает получение данных в отдельном методе жизненного цикла, таком как компонентDidMount, или использование перехватчиков, таких как useEffect, и обновление состояния после того, как данные станут доступны.

Рассмотрим следующий пример:

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 ? (
      
    ) : null;
  }
}

const Child = ({ data }) => (
  
    {data.map((x, i) => (
      {x}
    ))}
  
);

При таком подходе компонент ParentThatFetches асинхронно извлекает данные и соответствующим образом обновляет свое состояние. Как только данные становятся доступными, он отображает дочерний компонент, который отображает данные.

Альтернативный подход: серверные компоненты

Серверные компоненты React, представленные в React 18 , предоставляют другой подход к обработке асинхронных данных в приложениях React. В отличие от традиционной модели рендеринга на стороне клиента, серверные компоненты React визуализируются на сервере, что позволяет вам получать и обрабатывать данные до отправки HTML клиенту.

Вот обновленный пример, в котором используются серверные компоненты React:

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 (
    
        {data.map(({ address, email, mobile }, index) => (
          
        ))}
      
{address} Goa asdsad {email} {mobile}
); }

В этом примере функция getAddressData асинхронно извлекает адреса на сервере. Затем функция GeoServerComponent получает адреса в качестве реквизита и отображает необходимый HTML на сервере. Этот подход гарантирует, что данные будут готовы до того, как HTML будет отправлен клиенту, решая проблемы, возникающие при использовании асинхронности и ожидания непосредственно в функции рендеринга.

Заявление о выпуске Эта статья перепечатана по адресу: 1729236561. В случае каких-либо нарушений, пожалуйста, свяжитесь с [email protected], чтобы удалить ее.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3