← 返回
效率工具 中文

React Best Practices

React and Next.js performance optimization guidelines from Vercel Engineering. 57 rules across 8 categories for writing, reviewing, and refactoring React code.
来自 Vercel 工程团队的 React 和 Next.js 性能优化指南,涵盖 8 个类别的 57 条规则,用于编写、审查和重构 React 代码。
wpank
效率工具 clawhub v1.0.0 1 版本 98334.6 Key: 无需
★ 6
Stars
📥 5,253
下载
💾 236
安装
1
版本
#latest

概述

React Best Practices

Comprehensive performance optimization guide for React and Next.js applications from Vercel Engineering. Contains 57 rules across 8 categories, prioritized by impact.

Installation

OpenClaw / Moltbot / Clawbot

npx clawhub@latest install react-best-practices

WHAT This Skill Does

Provides actionable rules for:

  • Eliminating request waterfalls
  • Optimizing bundle size
  • Improving server-side performance
  • Efficient client-side data fetching
  • Minimizing re-renders
  • Rendering performance optimizations
  • JavaScript micro-optimizations
  • Advanced patterns for edge cases

WHEN To Use

  • Writing new React components or Next.js pages
  • Implementing data fetching (client or server-side)
  • Reviewing code for performance issues
  • Refactoring React/Next.js applications
  • Optimizing bundle size or load times
  • Debugging slow renders or waterfalls

KEYWORDS

react performance, nextjs optimization, bundle size, waterfalls, suspense, server components, rsc, rerender, usememo, dynamic import, parallel fetching, cache, swr

Rule Categories by Priority

PriorityCategoryImpactRule Prefix
-----------------------------------------
1Eliminating WaterfallsCRITICALasync-
2Bundle Size OptimizationCRITICALbundle-
3Server-Side PerformanceHIGHserver-
4Client-Side Data FetchingMEDIUM-HIGHclient-
5Re-render OptimizationMEDIUMrerender-
6Rendering PerformanceMEDIUMrendering-
7JavaScript PerformanceLOW-MEDIUMjs-
8Advanced PatternsLOWadvanced-

Quick Reference

1. Eliminating Waterfalls (CRITICAL)

RuleDescription
-------------------
async-defer-awaitMove await into branches where actually used
async-parallelUse Promise.all() for independent operations
async-dependenciesUse better-all for partial dependencies
async-api-routesStart promises early, await late in API routes
async-suspense-boundariesUse Suspense to stream content

2. Bundle Size Optimization (CRITICAL)

RuleDescription
-------------------
bundle-barrel-importsImport directly, avoid barrel files
bundle-dynamic-importsUse next/dynamic for heavy components
bundle-defer-third-partyLoad analytics/logging after hydration
bundle-conditionalLoad modules only when feature is activated
bundle-preloadPreload on hover/focus for perceived speed

3. Server-Side Performance (HIGH)

RuleDescription
-------------------
server-auth-actionsAuthenticate server actions like API routes
server-cache-reactUse React.cache() for per-request dedup
server-cache-lruUse LRU cache for cross-request caching
server-dedup-propsAvoid duplicate serialization in RSC props
server-serializationMinimize data passed to client components
server-parallel-fetchingRestructure components to parallelize fetches
server-after-nonblockingUse after() for non-blocking operations

4. Client-Side Data Fetching (MEDIUM-HIGH)

RuleDescription
-------------------
client-swr-dedupUse SWR for automatic request deduplication
client-event-listenersDeduplicate global event listeners
client-passive-event-listenersUse passive listeners for scroll
client-localstorage-schemaVersion and minimize localStorage data

5. Re-render Optimization (MEDIUM)

RuleDescription
-------------------
rerender-defer-readsDon't subscribe to state only used in callbacks
rerender-memoExtract expensive work into memoized components
rerender-memo-with-default-valueHoist default non-primitive props
rerender-dependenciesUse primitive dependencies in effects
rerender-derived-stateSubscribe to derived booleans, not raw values
rerender-derived-state-no-effectDerive state during render, not effects
rerender-functional-setstateUse functional setState for stable callbacks
rerender-lazy-state-initPass function to useState for expensive values
rerender-simple-expression-in-memoAvoid memo for simple primitives
rerender-move-effect-to-eventPut interaction logic in event handlers
rerender-transitionsUse startTransition for non-urgent updates
rerender-use-ref-transient-valuesUse refs for transient frequent values

6. Rendering Performance (MEDIUM)

RuleDescription
-------------------
rendering-animate-svg-wrapperAnimate div wrapper, not SVG element
rendering-content-visibilityUse content-visibility for long lists
rendering-hoist-jsxExtract static JSX outside components
rendering-svg-precisionReduce SVG coordinate precision
rendering-hydration-no-flickerUse inline script for client-only data
rendering-hydration-suppress-warningSuppress expected mismatches
rendering-activityUse Activity component for show/hide
rendering-conditional-renderUse ternary, not && for conditionals
rendering-usetransition-loadingPrefer useTransition for loading state

7. JavaScript Performance (LOW-MEDIUM)

RuleDescription
-------------------
js-batch-dom-cssGroup CSS changes via classes or cssText
js-index-mapsBuild Map for repeated lookups
js-cache-property-accessCache object properties in loops
js-cache-function-resultsCache function results in module-level Map
js-cache-storageCache localStorage/sessionStorage reads
js-combine-iterationsCombine multiple filter/map into one loop
js-length-check-firstCheck array length before expensive ops
js-early-exitReturn early from functions
js-hoist-regexpHoist RegExp creation outside loops
js-min-max-loopUse loop for min/max instead of sort
js-set-map-lookupsUse Set/Map for O(1) lookups
js-tosorted-immutableUse toSorted() for immutability

8. Advanced Patterns (LOW)

RuleDescription
-------------------
advanced-event-handler-refsStore event handlers in refs
advanced-init-onceInitialize app once per app load
advanced-use-latestuseLatest for stable callback refs

How to Use

Reading Individual Rules

Each rule file in rules/ contains:

  • Brief explanation of why it matters
  • Incorrect code example with explanation
  • Correct code example with explanation
  • Additional context and references
rules/async-parallel.md
rules/bundle-barrel-imports.md
rules/rerender-memo.md

Full Compiled Document

For the complete guide with all rules expanded: AGENTS.md

This 2900+ line document contains every rule with full code examples and detailed explanations, suitable for comprehensive reference.

Key Patterns

Parallel Data Fetching

// Bad: sequential
const user = await fetchUser()
const posts = await fetchPosts()

// Good: parallel
const [user, posts] = await Promise.all([
  fetchUser(),
  fetchPosts()
])

Dynamic Imports

// Bad: bundles Monaco with main chunk
import { MonacoEditor } from './monaco-editor'

// Good: loads on demand
const MonacoEditor = dynamic(
  () => import('./monaco-editor').then(m => m.MonacoEditor),
  { ssr: false }
)

Functional setState

// Bad: stale closure risk
const addItem = useCallback((item) => {
  setItems([...items, item])
}, [items]) // recreates on every items change

// Good: always uses latest state
const addItem = useCallback((item) => {
  setItems(curr => [...curr, item])
}, []) // stable reference

NEVER Do

  1. NEVER await operations sequentially when they can run in parallel
  2. NEVER import from barrel files (import { X } from 'lib') — import directly
  3. NEVER skip authentication in Server Actions — treat them like API routes
  4. NEVER pass entire objects to client components when only one field is needed
  5. NEVER use && for conditional rendering with numbers — use ternary
  6. NEVER subscribe to state only used in event handlers — read on demand
  7. NEVER mutate arrays with .sort() — use .toSorted()
  8. NEVER put initialization in useEffect([]) — use module-level guard

版本历史

共 1 个版本

  • v1.0.0 当前
    2026-03-28 16:17 安全 安全

安全检测

腾讯云安全 (Keen)

安全,无风险
查看报告

腾讯云安全 (Sanbu)

安全,无风险
查看报告

🔗 相关推荐

productivity

Weather

steipete
获取当前天气和预报(无需API密钥)
★ 444 📥 226,101
productivity

Nano Pdf

steipete
使用nano-pdf CLI通过自然语言指令编辑PDF
★ 274 📥 114,718
developer-tools

Code Review

wpank
涵盖安全、性能、可维护性、正确性和测试的系统化代码审查模式,包含严重等级、结构化反馈指南、审查流程及需避免的反模式。适用于审查 PR、建立审查标准或提升审查质量。
★ 31 📥 17,065