React 中 map 处理异步数据不渲染的问题及解决方法

 更新时间:2026年01月20日 09:11:56   作者:孩子 你要相信光  
文章讲述了在使用React时遇到的异步问题导致页面卡顿的情况,通过Promise.all等方法解决了异步操作的顺序问题,使得页面能够正常渲染,感兴趣的朋友跟随小编一起看看吧

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(创建 Promise 队列)
Promise队列:[PA, PB, PC]
     ↓ Promise.all(等待全部完成)
处理结果:[A', B', C'] ← 这才是 React 要的!

有趣的比喻

把异步处理想象成餐厅厨房:

// ❌ 错误做法:一个厨师做完所有菜才上菜
// (顾客:我饿死了...)
// ✅ 正确做法:Promise.all - 多个厨师并行做菜
// (所有菜同时做好,一起上桌)
// 🎯 优化做法:分批处理 - 做好一部分先上
// (顾客:先吃着,后面的马上好)

备忘清单

需要 Promise.all 的场景:

  • ✅ marked.parse() 处理 Markdown
  • ✅ 图片预加载 new Image().src
  • ✅ API 并行请求多个资源
  • ✅ 文件读取/处理
  • ✅ 加密/解密操作

不需要 Promise.all 的场景:

  • ❌ 纯同步计算(array.map(x => x * 2)
  • ❌ 简单的数据转换
  • ❌ 过滤/排序操作

下次当你的页面陷入沉默时,记得问一句:

“是不是有 Promise 在 map 里没被 await?”

记住:异步不可怕,可怕的是不知道它是异步的!

到此这篇关于React 中 map 处理异步数据不渲染的问题及解决方法的文章就介绍到这了,更多相关react map 处理异步数据内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • ReactHook使用useState更新变量后,如何拿到变量更新后的值

    ReactHook使用useState更新变量后,如何拿到变量更新后的值

    这篇文章主要介绍了ReactHook使用useState更新变量后,如何拿到变量更新后的值问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • React中useEffect依赖数组的常见陷阱

    React中useEffect依赖数组的常见陷阱

    本文主要介绍了React中useEffect依赖数组的常见陷阱,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-09-09
  • 浅谈React组件在什么情况下会重新渲染

    浅谈React组件在什么情况下会重新渲染

    当我们使用React编写组件时,组件的重新渲染是一个重要的概念,本文主要介绍了React组件在什么情况下会重新渲染,具有一定的参考价值,感兴趣的可以了解一下
    2023-12-12
  • 浅谈React Native 中组件的生命周期

    浅谈React Native 中组件的生命周期

    本篇文章主要介绍了浅谈React Native 中组件的生命周期,非常具有实用价值,需要的朋友可以参考下
    2017-09-09
  • React使用useEffect解决setState副作用详解

    React使用useEffect解决setState副作用详解

    这篇文章主要为大家介绍了React使用useEffect解决setState副作用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • react中使用forEach或map两种方式遍历数组

    react中使用forEach或map两种方式遍历数组

    这篇文章主要介绍了react中使用forEach或map两种方式遍历数组,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09
  • React中classnames库使用示例

    React中classnames库使用示例

    这篇文章主要为大家介绍了React中classnames库使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • react实现antd线上主题动态切换功能

    react实现antd线上主题动态切换功能

    这篇文章主要介绍了react实现antd线上主题动态切换功能,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-08-08
  • React函数组件与类组件使用及优劣对比

    React函数组件与类组件使用及优劣对比

    本文主要介绍了React函数组件与类组件使用及优劣对比,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • react 项目中引入图片的几种方式

    react 项目中引入图片的几种方式

    本文主要介绍了react 项目中引入图片,本文详细的介绍了几种方法,需要的朋友们下面随着小编来一起学习学习吧
    2021-06-06

最新评论