」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何在 React 渲染函數中有效使用非同步呼叫?

如何在 React 渲染函數中有效使用非同步呼叫?

發佈於2024-12-21
瀏覽:603

How to Effectively Use Asynchronous Calls in React Render Functions?

在React 渲染函數中使用Async/Await:另一種方法

React 應用程式中經常會遇到非同步編程,特別是在處理外部事務時資料來源。然而,直接在 React 的 render 函數中使用 async 和 wait 可能會導致意外的結果。

為了在 React 中有效地合併非同步調用,常見的方法是利用狀態管理技術。這涉及在單獨的生命週期方法中獲取數據,例如 componentDidMount 或使用 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 Server Components 在伺服器上渲染,讓您在 HTML 發送到客戶端之前取得和處理資料。

以下是利用 React Server Components 的更新範例:

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 函數接收位址作為 props,並在伺服器上呈現必要的 HTML。這種方式保證了在HTML傳送到客戶端之前資料已經準備好,解決了直接在render函數中使用async和await時遇到的問題。

版本聲明 本文轉載於:1729236561如有侵犯,請洽[email protected]刪除
最新教學 更多>
  • Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta:列偏移的刪除和恢復Bootstrap 4 在其Beta 1 版本中引入了重大更改柱子偏移了。然而,隨著 Beta 2 的後續發布,這些變化已經逆轉。 從 offset-md-* 到 ml-auto在 Bootstrap 4 Beta 1 中, offset-md-*...
    程式設計 發佈於2024-12-22
  • 大批
    大批
    方法是可以在物件上呼叫的 fns 數組是對象,因此它們在 JS 中也有方法。 slice(begin):將陣列的一部分提取到新數組中,而不改變原始數組。 let arr = ['a','b','c','d','e']; // Usecase: Extract till index ...
    程式設計 發佈於2024-12-22
  • 如何在 PHP 中組合兩個關聯數組,同時保留唯一 ID 並處理重複名稱?
    如何在 PHP 中組合兩個關聯數組,同時保留唯一 ID 並處理重複名稱?
    在 PHP 中組合關聯數組在 PHP 中,將兩個關聯數組組合成一個數組是常見任務。考慮以下請求:問題描述:提供的代碼定義了兩個關聯數組,$array1 和 $array2。目標是建立一個新陣列 $array3,它合併兩個陣列中的所有鍵值對。 此外,提供的陣列具有唯一的 ID,而名稱可能重疊。要求是建...
    程式設計 發佈於2024-12-22
  • 如何在 MPI 中有效發送和接收二維數組?
    如何在 MPI 中有效發送和接收二維數組?
    使用MPI 發送和接收2D 數組使用MPI 發送和接收2D 數組問題:您有一個大型2D 矩陣,需要跨多個處理使用MPI 的節點。節點之間唯一的通訊涉及在每個時間步後共享邊緣值。 方法:// (assume A is a 2D array) if (myrank == 0) { for (i = ...
    程式設計 發佈於2024-12-22
  • 如何在 CSS 媒體查詢中使用「OR」邏輯組合多個條件?
    如何在 CSS 媒體查詢中使用「OR」邏輯組合多個條件?
    使用OR 邏輯組合CSS 媒體查詢中的多個條件在CSS 媒體查詢中,使用「OR」邏輯指定多個條件可能很有用用於定位具有不同螢幕尺寸或方面的裝置。雖然問題中提供的程式碼不正確,但有一個簡單的方法可以實現所需的結果。 要使用「OR」邏輯指定多個條件,請用逗號分隔:@media screen and (m...
    程式設計 發佈於2024-12-21
  • 為什麼我的 Go 程式碼中出現「已匯入但未使用」錯誤?
    為什麼我的 Go 程式碼中出現「已匯入但未使用」錯誤?
    Go 中錯誤:「已匯入且未使用」Go 中匯入套件時,出現「已匯入且未使用」錯誤如果匯入的包未在目前文件中使用。 在您的情況下,您匯入了「./api」套件。編譯器偵測到您尚未在程式碼中使用此套件。要解決此錯誤,您需要實際利用套件中的某些內容。 您已經提到您在main 函數中使用api 包,但您的程式碼...
    程式設計 發佈於2024-12-21
  • 如何在 Python 列表推導式中使用 if/else 邏輯?
    如何在 Python 列表推導式中使用 if/else 邏輯?
    使用if/else 進行列表推導式:語法與用法在Python 中使用清單推導式時,會遇到合併if /else 邏輯的情況處理條件操作。本文介紹了此類場景的正確語法。 一個常見任務是根據來源序列建立一個列表,並使用以下包含 if/else 結構的 for 迴圈:results = [] for x i...
    程式設計 發佈於2024-12-21
  • 如何使用 JavaScript 轉義 JSON 字串中的換行符號?
    如何使用 JavaScript 轉義 JSON 字串中的換行符號?
    JavaScript 中使用換行符轉義JSON 字符串在JavaScript 中,構造JSON 字符串需要轉義特殊字符,包括換行符。為此,請按照下列步驟操作:1。字串化 JSON 物件:使用 JSON.stringify() 將 JSON 物件轉換為字串。 2.轉義換行符:利用 .replace()...
    程式設計 發佈於2024-12-21
  • 在 Go 中使用 WebSocket 進行即時通信
    在 Go 中使用 WebSocket 進行即時通信
    构建需要实时更新的应用程序(例如聊天应用程序、实时通知或协作工具)需要比传统 HTTP 更快、更具交互性的通信方法。这就是 WebSockets 发挥作用的地方!今天,我们将探讨如何在 Go 中使用 WebSocket,以便您可以向应用程序添加实时功能。 在这篇文章中,我们将介绍: WebSocke...
    程式設計 發佈於2024-12-21
  • 為什麼 SimpleDateFormat 錯誤地解析「YYYY-MM-dd HH:mm」?
    為什麼 SimpleDateFormat 錯誤地解析「YYYY-MM-dd HH:mm」?
    SimpleDateFormat 錯誤解析「YYYY-MM-dd HH:mm」試著解析格式為「YYYY-MM」的字串時-dd HH:mm" 到日期,一些開發人員遇到意外的日期結果。當使用SimpleDateFormat 類別並將lenient 設定設為false 時,會發生這種情況。 St...
    程式設計 發佈於2024-12-21
  • HTML 格式標籤
    HTML 格式標籤
    HTML 格式化元素 **HTML Formatting is a process of formatting text for better look and feel. HTML provides us ability to format text without us...
    程式設計 發佈於2024-12-21
  • 如何在Python中高效率計算列表的平均值?
    如何在Python中高效率計算列表的平均值?
    在Python中計算清單的平均值確定清單的算術平均值或平均值對於統計分析至關重要。在 Python 中,有多種方法可用於此操作。以下是對每種方法的詳細探索:Python >= 3.8:statistics.fmean統計模組提供了浮點數的數值穩定性,確保準確的結果。這是Python 3.8及更高版本...
    程式設計 發佈於2024-12-21
  • 如何設計與標準庫正確整合的自訂 STL 容器?
    如何設計與標準庫正確整合的自訂 STL 容器?
    編寫自訂STL 容器的指南設計符合STL 約定的新容器時,遵循某些指南至關重要以確保其正確行為並與STL 庫整合。 迭代器介面:迭代器介面:定義一個具有適當的iterator_category標記的迭代器類,例如input_iterator_tag、output_iterator_tag、forwa...
    程式設計 發佈於2024-12-21
  • 為什麼 REST API 使用不同的 HTTP 方法(PUT、DELETE、POST、GET)?
    為什麼 REST API 使用不同的 HTTP 方法(PUT、DELETE、POST、GET)?
    REST API:HTTP 方法(PUT、DELETE、POST、GET)的重要性在RESTful API 領域,一個基本的問題出現了:為什麼要使用多種HTTP 請求類型,例如PUT、DELETE、POST 和GET?重要的是要了解 REST 的目的不僅僅是使用最簡單的方法存取資料。 REST 的角...
    程式設計 發佈於2024-12-21
  • 為什麼我的行動媒體查詢無法在行動裝置上運行?
    為什麼我的行動媒體查詢無法在行動裝置上運行?
    行動媒體查詢在行動裝置上不起作用:故障排除提示許多開發人員面臨行動裝置上CSS3 媒體查詢無回應的問題。如果您遇到此問題,讓我們根據您的查詢探索潛在的解決方案:在您的樣式表中,您正在使用行動裝置的媒體查詢,但在實際查看時它們似乎不起作用手機。相反,會顯示預設 CSS。 解決方案:驗證媒體查詢語法: ...
    程式設計 發佈於2024-12-21

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3