news 2026/4/15 9:53:50

WHAT - Vercel react-best-practices 系列(四)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
WHAT - Vercel react-best-practices 系列(四)

文章目录

  • 前言
  • Guidelines
  • Rendering Patterns
    • Animate SVG wrappers, not SVG elements directly
      • 核心问题
      • 反例:直接动画
      • 推荐:动画容器
      • 典型场景
    • Use content-visibility: auto for long lists
      • 核心问题
      • 反例:普通列表
      • 推荐:content-visibility
      • 额外技巧
    • Prevent hydration mismatch with inline scripts
      • 核心问题
      • 反例:SSR 内直接修改 DOM
      • 推荐做法
      • 场景
    • Use explicit conditional rendering
      • 核心问题
      • 反例:用 &&
      • 推荐:用三元
      • 额外注意
  • 总结

前言

react-best-practices

React and Next.js performance optimization guidelines from Vercel Engineering. This skill should be used when writing, reviewing, or refactoring React/Next.js code to ensure optimal performance patterns. Triggers on tasks involving React components, Next.js pages, data fetching, bundle optimization, or performance improvements.

Guidelines


在这个系列,我会逐条拆解,每一条都给出:

  • 核心问题是什么
  • 为什么会慢(本质原因)
  • 典型业务场景
  • 反例代码
  • 推荐写法
  • 在 React / Next.js 中的实际收益

Rendering Patterns

这是系列的第四部分。

Animate SVG wrappers, not SVG elements directly

「不要直接在 SVG 元素上做动画」

核心问题

  • SVG 元素本身(<path><circle>)渲染成本高
  • 动画会频繁触发 repaint / reflow
  • 会严重影响性能,尤其在大量节点或复杂图形中

反例:直接动画

<svg width="100"height="100"><circle cx="50"cy="50"r="40"fill="red"style={{transform:`rotate(${angle}deg)`}}/></svg>

每次angle更新,浏览器必须重绘整个<circle>

推荐:动画容器

<div style={{transform:`rotate(${angle}deg)`}}><svg width="100"height="100"><circle cx="50"cy="50"r="40"fill="red"/></svg></div>

好处:

  • 浏览器只在<div>上做 GPU transform
  • <svg>内容不会被重复绘制
  • 动画性能大幅提升

典型场景

  • 仪表盘指针
  • loading spinner
  • 图表动态旋转

Use content-visibility: auto for long lists

「长列表使用 content-visibility 延迟渲染」

核心问题

  • 浏览器渲染大 DOM(数百 / 千行)性能低
  • 每次 scroll / paint 都计算 layout

反例:普通列表

<ul>{data.map(item=><li key={item.id}>{item.name}</li>)}</ul>
  • 1000 行 → 每次渲染 / scroll 都会 layout / paint

推荐:content-visibility

<ul style={{contentVisibility:'auto',containIntrinsicSize:'1000px'}}>{data.map(item=><li key={item.id}>{item.name}</li>)}</ul>

好处:

  • 浏览器只渲染可视区域
  • DOM 节点仍在 document flow
  • 性能接近虚拟列表,但不依赖 JS

额外技巧

  • contain-intrinsic-size提前占位
  • 表格、卡片、长文列表非常适用

Prevent hydration mismatch with inline scripts

「避免 hydration mismatch / 客户端渲染与服务端不一致」

核心问题

  • React SSR + RSC / Next.js
  • 服务端生成 HTML → 客户端 hydrate
  • 如果 inline JS 改变 DOM 或插入元素
  • 会导致Hydration Mismatch→ 控制台报错 / UI 闪烁

反例:SSR 内直接修改 DOM

<div dangerouslySetInnerHTML={{__html:`<script>document.body.style.background='red'</script>`}}/>
  • 服务端生成的 DOM 和客户端 React DOM不一致
  • React hydrate 失败

推荐做法

  • useEffect / useLayoutEffect在客户端处理
useEffect(() => { document.body.style.background = 'red' }, [])

SSR 阶段不改 DOM → 避免 mismatch

场景

  • 动态插入广告 / 脚本
  • 第三方库初始化
  • UI 初始化特效

Use explicit conditional rendering

「条件渲染用三元表达式,而不是 &&」

核心问题

  • false && <Component />会渲染false→ 有时造成空 DOM / Hydration mismatch
  • 特别在 SSR / Client Hydration 时容易出错

反例:用 &&

{isVisible && <Modal />}
  • SSR:isVisible=false→ 渲染false
  • Client:isVisible=true→ 渲染<Modal />
  • React 可能报 hydration mismatch

推荐:用三元

{isVisible ? <Modal /> : null}
  • SSR / Client 渲染保持一致
  • Hydration 安全

额外注意

  • 对列表也适用:
{/* ❌ 不推荐 */} {items.length && <List items={items} />} {/* ✅ 推荐 */} {items.length > 0 ? <List items={items} /> : null}

总结

Rendering Patterns =让浏览器和 React 都高效

  • SVG 动画 → wrapper transform
  • 长列表 → content-visibility
  • SSR → hydrate 安全
  • 条件渲染 → 明确三元
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/13 17:16:54

soular实践教程 - 如何使用soular统一管理TikLab帐号

soular是DevOps工具套件的帐号与门户中心&#xff0c;包含账号管理、认证管理、工作台管理等功能&#xff0c;产品简洁易用、开源免费。本文主要介绍soular的账号管理1、用户管理1.1 创建用户登录系统->系统设置->用户与权限->用户->添加用户添加用户属性说明属性是…

作者头像 李华
网站建设 2026/4/8 11:50:22

sward实践教程 - Markdown的创建与管理

Sward是一款国产开源知识管理工具&#xff0c;提供知识库管理、文档管理、Markdown编辑、内容分享等核心功能&#xff0c;整体设计轻量、简洁且易用。其内置的Markdown功能尤其适用于技术文档编写、博客创作与日常笔记整理等多种场景。本文将重点介绍如何在Sward中添加和管理Ma…

作者头像 李华
网站建设 2026/4/15 5:29:22

靠谱的厌氧池清淤哪有

厌氧池清淤哪家好&#xff1a;专业深度测评开篇&#xff1a;定下基调厌氧池在污水处理中扮演着重要角色&#xff0c;但随着时间的推移&#xff0c;池内会积累大量污泥&#xff0c;影响处理效果。因此&#xff0c;定期清淤成为必不可少的工作。本文将对市面上主要的厌氧池清淤服…

作者头像 李华
网站建设 2026/4/8 18:11:41

【拯救HMI】HMI容错设计:如何减少操作失误并快速纠错?

在复杂、高压的工业环境中&#xff0c;操作失误难以完全避免。容错设计的哲学不是追求“零错误”&#xff0c;而是承认“人会犯错”&#xff0c;并通过系统设计来 “预防错误发生、减轻错误后果、提供快速恢复路径” &#xff0c;将人为失误对生产系统的影响降至最低。一、 预防…

作者头像 李华
网站建设 2026/4/9 15:05:02

形成性考核管理系统

第三章 需求分析 本章节的内容主要以设计为出发点介绍当初设计该系统的想法与初衷&#xff0c;同时根据用户对系统的实际需求进行构思。参照这些&#xff0c;对系统不断改进、完善&#xff0c;使用户的需求得以满足的同时&#xff0c;提高系统的稳定性以及运行速度的高效性。 3…

作者头像 李华
网站建设 2026/4/11 8:56:51

宏智树 AI:ChatGPT 学术版驱动的 AI5.0 学术创作全生态解决方案

当学术研究遇上智能科技&#xff0c;论文写作的低效内卷从此成为历史。宏智树 AI&#xff0c;一款由 ChatGPT 学术版模型深度驱动、搭载前沿 AI5.0 技术架构的专业学术智能解决方案平台&#xff0c;以 “真实、专业、高效、全流程” 为核心&#xff0c;重塑学术创作全新生态&am…

作者头像 李华