用途:该技能面向 Epic Stack 应用开发,指导编写高效 React 组件、优化性能与包体积、遵循 React Router 约定、避免常见反模式、实现代码分割、优化重渲染与数据获取,并正确使用 React hooks。
核心理念:遵循 Epic Web 原则——先能用、再正确、后快速;务实优先于纯粹;追求可持续的开发速度;尽量少做,只在带来真实价值时增加复杂度。
主要能力与约定:
- 数据获取:使用 React Router loader,而非 useEffect 中 fetch。
- 副作用:优先事件处理器、CSS、ref 回调或 useSyncExternalStore;仅在事件监听等场景使用 useEffect,并配合 AbortController 清理。
- 代码分割:React Router 按路由自动分割,重组件用 lazy 与 Suspense 动态导入。
- 重渲染优化:用 useMemo 缓存昂贵计算、useCallback 缓存回调,避免对简单值或简单回调做无谓记忆化。
- 包体积:按需导入具体函数,避免 barrel 导入整个库。
- 表单:使用 Conform 的 useForm、getFormProps 与 parseWithZod 配合 React Router Form。
- 组件组合:拆分为小型聚焦组件,避免单体大组件。
- 错误边界:为路由添加 ErrorBoundary,可按状态处理 404 等。
- TypeScript:显式声明 props 类型,使用 Route 类型保证 loader 与组件类型安全。
- 加载状态:使用 useNavigation 的 state 判断提交中状态。
- 避免数据瀑布:用 Promise.all 并行获取,嵌套路由 loader 并行执行。
- SSR 性能:只取初始渲染所需字段,昂贵操作使用 cachified 缓存。
- 渲染性能:对昂贵组件和列表项使用 React.memo,避免在渲染中创建新对象或数组。
- React 18+:用 useTransition 处理非紧急更新。
常见错误:在 useEffect 中取数、过度使用 useEffect、过早记忆化、barrel 导入、忽略类型、不处理加载状态、单体组件、缺少错误边界、数据瀑布、取多余数据、渲染中新建对象、列表未记忆化、未利用路由级代码分割。
限制:资料未提供安装命令、收费方式、平台支持或具体版本要求,暂未提供。