workleap-react-best-practices

📁 workleap/wl-squide 📅 Today
3
总安装量
2
周安装量
#59157
全站排名
安装命令
npx skills add https://github.com/workleap/wl-squide --skill workleap-react-best-practices

Agent 安装分布

amp 1
cline 1
opencode 1
cursor 1
continue 1
kimi-cli 1

Skill 文档

Workleap React Best Practices

Performance optimization guide for React Single Page Applications (SPA), tailored for Workleap’s SPA-first architecture.

When to Apply

Reference these guidelines when:

  • Writing new React components
  • Reviewing code for performance issues
  • Refactoring existing React code
  • Optimizing bundle size or load times
  • Debugging unnecessary re-renders

Rule Categories by Priority

Priority Category Impact Reference
1 Eliminating Waterfalls CRITICAL async-rules.md
2 Bundle Size Optimization CRITICAL bundle-rules.md
3 Re-render Optimization MEDIUM rerender-rules.md
4 Rendering Performance MEDIUM rendering-rules.md
5 JavaScript Performance LOW-MEDIUM js-rules.md
6 Advanced Patterns LOW advanced-rules.md

Quick Reference

1. Eliminating Waterfalls (CRITICAL)

Waterfalls are the #1 performance killer. Each sequential await adds full network latency.

  • Defer Await Until Needed – Move await into branches where actually used
  • Promise.all() for Independent Operations – Run independent async operations concurrently
  • Dependency-Based Parallelization – Use promise chaining for partial dependencies
  • Prevent Waterfall Chains – Start promises early, await late

Read references/async-rules.md for detailed rules and code examples.

2. Bundle Size Optimization (CRITICAL)

Reducing initial bundle size improves Time to Interactive and Largest Contentful Paint.

  • Route-Based Code Splitting – Lazy-load each route so users only download code they visit
  • Avoid Barrel File Imports – Import directly from source files, not barrel re-exports
  • React.lazy for Heavy Components – Lazy-load large components not needed on initial render
  • Conditional Module Loading – Load modules only when feature is activated
  • Preload on User Intent – Preload heavy bundles on hover/focus

Read references/bundle-rules.md for detailed rules and code examples.

3. Re-render Optimization (MEDIUM)

Reducing unnecessary re-renders minimizes wasted computation and improves UI responsiveness.

  • Defer State Reads – Don’t subscribe to state only used in callbacks
  • Extract to Memoized Components – Enable early returns before computation
  • Hoist Default Non-primitive Props – Extract default values to constants for stable memo
  • Narrow Effect Dependencies – Use primitive dependencies in effects
  • Subscribe to Derived State – Subscribe to derived booleans, not raw values
  • Calculate Derived State During Render – Derive state during render, not effects
  • Functional setState – Use functional setState for stable callbacks
  • Lazy State Initialization – Pass function to useState for expensive values
  • Skip useMemo for Simple Expressions – Avoid memo for simple primitives
  • Put Logic in Event Handlers – Put interaction logic in event handlers, not effects
  • Transitions for Non-Urgent Updates – Use startTransition for non-urgent updates
  • useRef for Transient Values – Use refs for transient frequent values

Read references/rerender-rules.md for detailed rules and code examples.

4. Rendering Performance (MEDIUM)

Optimizing the rendering process reduces the work the browser needs to do.

  • Animate SVG Wrapper – Animate div wrapper, not SVG element
  • CSS content-visibility – Use content-visibility for long lists
  • Hoist Static JSX – Extract static JSX outside components
  • Optimize SVG Precision – Reduce SVG coordinate precision
  • Activity Component (Experimental) – Use Activity for show/hide with state preservation
  • Explicit Conditional Rendering – Use ternary, not && for conditionals
  • useTransition for Loading – Prefer useTransition over manual loading state

Read references/rendering-rules.md for detailed rules and code examples.

5. JavaScript Performance (LOW-MEDIUM)

Micro-optimizations for hot paths that can add up to meaningful improvements.

  • Avoid Layout Thrashing – Batch DOM writes, avoid interleaved reads
  • Build Index Maps – Use Map for repeated lookups
  • Cache Property Access – Cache object properties in loops
  • Cache Function Results – Cache repeated function calls in module-level Map
  • Cache Storage API Calls – Cache localStorage/sessionStorage reads
  • Combine Array Iterations – Combine multiple filter/map into one loop
  • Early Length Check – Check array length before expensive comparison
  • Early Return – Return early from functions
  • Hoist RegExp – Hoist RegExp creation outside loops
  • Loop for Min/Max – Use loop instead of sort for min/max
  • Set/Map Lookups – Use Set/Map for O(1) lookups
  • toSorted() Immutability – Use toSorted() to prevent mutation bugs

Read references/js-rules.md for detailed rules and code examples.

6. Advanced Patterns (LOW)

Advanced patterns for specific cases that require careful implementation.

  • Event Handler Refs – Store event handlers in refs for stable subscriptions
  • Initialize Once – Initialize app once per load, not per mount
  • Stable Callback Refs – Stable callback refs for effects without re-runs

Read references/advanced-rules.md for detailed rules and code examples.