React 中 map 處理異步數據不渲染的問題及解決方法
Map 異步之困:從卡頓到流暢的蛻變
當
map遇上異步,你的頁面還在“思考人生”嗎?
故事:一個讓頁面“沉默”的 bug
昨天,我的頁面像個啞巴一樣——數據準備好了,UI 卻一片空白??刂婆_沒有報錯,網絡請求一切正常,但用戶看到的就是 “無”。
調試三小時后,終于找到了罪魁禍首:
// ?? 沉默的“兇手”
const markList = data.map(item => ({
...item,
content: parseMarkdown(item.rawContent) // 這里返回的是 Promise!
}));
// 結果:markList = [Promise, Promise, Promise...]
// React: “我該渲染什么?一堆 Promise 對象?”問題診斷:為什么頁面不渲染?
同步思維 vs 異步現實
// ? 我們以為的(同步思維): const result = [處理后的對象1, 處理后的對象2, ...] // ? 實際上的(異步現實): const result = [Promise<pending>, Promise<pending>, ...]
React 的困惑
// React 嘗試渲染時:
<div>
{markList.map(item => (
<div>{item.content}</div> // item.content 是 Promise,不是字符串!
))}
</div>
// 輸出:[object Promise], [object Promise]...解決方案:讓異步“排隊站好”
方案一:Promise.all 大法(最常用)
// ? 正確姿勢:等待所有 Promise 完成
const processedData = await Promise.all(
data.map(async item => ({
...item,
content: await parseMarkdown(item.rawContent)
}))
);可視化流程:
原始數據:[A, B, C]
↓ map + async(創(chuàng)建 Promise 隊列)
Promise隊列:[PA, PB, PC]
↓ Promise.all(等待全部完成)
處理結果:[A', B', C'] ← 這才是 React 要的!有趣的比喻
把異步處理想象成餐廳廚房:
// ? 錯誤做法:一個廚師做完所有菜才上菜 // (顧客:我餓死了...) // ? 正確做法:Promise.all - 多個廚師并行做菜 // (所有菜同時做好,一起上桌) // ?? 優(yōu)化做法:分批處理 - 做好一部分先上 // (顧客:先吃著,后面的馬上好)
備忘清單
需要 Promise.all 的場景:
- ?
marked.parse()處理 Markdown - ? 圖片預加載
new Image().src - ? API 并行請求多個資源
- ? 文件讀取/處理
- ? 加密/解密操作
不需要 Promise.all 的場景:
- ? 純同步計算(
array.map(x => x * 2)) - ? 簡單的數據轉換
- ? 過濾/排序操作
下次當你的頁面陷入沉默時,記得問一句:
“是不是有 Promise 在 map 里沒被 await?”
記?。寒惒讲豢膳?,可怕的是不知道它是異步的!
到此這篇關于React 中 map 處理異步數據不渲染的問題及解決方法的文章就介紹到這了,更多相關react map 處理異步數據內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
使用react-router4.0實現重定向和404功能的方法
本篇文章主要介紹了使用react-router4.0實現重定向和404功能的方法,具有一定的參考價值,有興趣的可以了解一下2017-08-08
react中value與defaultValue的區(qū)別及說明
這篇文章主要介紹了react中value與defaultValue的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-05-05
react hooks使用Echarts圖表中遇到的情況及相關配置問題
這篇文章主要介紹了react hooks使用Echarts圖表中遇到的情況及相關配置問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-03-03
淺談react-native熱更新react-native-pushy集成遇到的問題
下面小編就為大家?guī)硪黄獪\談react-native熱更新react-native-pushy集成遇到的問題。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-09-09
react實現鼠標懸停在SVG地圖上某個區(qū)域時上方呈現柱形圖效果
這篇文章主要介紹了react實現鼠標懸停在SVG地圖上某個區(qū)域時,其上方呈現柱形圖,本文通過實例代碼給大家介紹的非常詳細,需要的朋友可以參考下2025-04-04

