如何在 React 渲染函數中正確使用 Async/Await?
Oct 18, 2024 pm 03:28 PMUnderstanding Async/Await in React Render Functions
Asynchronous programming, enabled by async/await syntax, is common in back-end development, such as Node.js, but can also be applied in front-end scenarios within React render functions.
Use Case: Geocoding with react-geocode
Consider a scenario where you need to obtain the place name for multiple locations using the react-geocode library and display them in a React table:
<code class="js">import React, { useEffect, useState } from 'react'; import Geocode from 'react-geocode'; import _ from 'lodash'; const GeocodeTable = ({ locations }) =&gt; { const [addresses, setAddresses] = useState([]); useEffect(() =&gt; { Promise.all(locations.map(async (loc) =&gt; { const address = await Geocode.fromLatLng(loc[0], loc[1]); return address.results[0].formatted_address; })) .then(results =&gt; setAddresses(results)); }, [locations]); return ( &lt;tbody&gt; {addresses.map((addr, idx) =&gt; ( &lt;tr key={idx}&gt; &lt;td&gt;{addr}&lt;/td&gt; &lt;td&gt;Goa&lt;/td&gt; &lt;td&gt;asdsad&lt;/td&gt; &lt;td&gt;{_.get(loc, 'driverId.email', '')}&lt;/td&gt; &lt;td&gt;{_.get(loc, 'driverId.mobile', '')}&lt;/td&gt; &lt;/tr&gt; ))} &lt;/tbody&gt; ); };</code>
Mistakes to Avoid
In your original code, you attempted to use async/await directly within the map function of the render function. This is not supported and will result in an empty return.
Best Practices
- Separate Data Fetching from Displaying: The recommended approach is to separate data fetching from rendering. Use a parent component to perform asynchronous operations (like geocoding) and conditionally render a child component when the data is available.
- Use Memoization: To optimize performance, consider using memoization techniques, such as useMemo in the parent component, to avoid redundant data fetching.
- TypeScript Support: If using TypeScript, consider defining types for the geocoding results to improve type safety and avoid potential errors.
以上是如何在 React 渲染函數中正確使用 Async/Await?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱門文章

熱門文章

熱門文章標籤

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)