mcpField
M
modern-best-practice-react-components

modern-best-practice-react-components

github.com/academind开发1188 次安装40 周前更新
代码仓库

关于 modern-best-practice-react-components

面向开发者的 React 19+ 组件编写指南,侧重代码清晰和可维护性。内容强调职责单一、派生状态、克制使用副作用及组合式设计。

主要功能

  1. 01职责单一的组件结构
  2. 02为属性和返回值添加类型
  3. 03优先使用派生状态
  4. 04少用副作用和记忆化
  5. 05采用组合式属性设计

适用场景

  1. 01编写新的 React 组件
  2. 02重构状态逻辑复杂的组件
  3. 03检查组件模式是否便于维护

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/academind/ai-config --skill modern-best-practice-react-components

安装后在 Claude Code 中输入/modern-best-practice-react-components确认已加载。

附带文件references/you-dont-need-useeffect.md

详细介绍

编写 React 组件

我们使用现代 React(19+),并遵循以清晰、正确和易维护为目标的通用最佳实践。

组件结构与风格

  • 优先使用小巧、专注且只承担单一职责的组件
  • 优先使用命名的 function 组件,而不是箭头函数
    • 例外:匿名回调、内联渲染属性和闭包
  • 优先在适用时显式声明返回类型和 props 类型(TypeScript)
  • 保持组件扁平、易读;避免 JSX 深度嵌套
  • 将相关逻辑归在一起(事件处理器、派生值、辅助函数)

状态管理

  • 避免使用 useEffect()
  • 避免不必要地使用 useState() 或 useReducer()
    • 尽可能从 props 或其他状态派生状态
    • 将状态放在尽可能低层的组件中
  • 不要将 props 镜像到状态中,除非绝对必要
  • 相较于同步非受控状态,优先使用受控组件

渲染与派生

  • 优先在行内或通过辅助函数计算派生值
  • 谨慎使用 useMemo(),且仅用于已证实的性能问题
  • 避免过早优化
  • 保持渲染逻辑具有确定性且无副作用

事件处理

  • 避免在 JSX 中使用行内事件处理器

    • 优先:

      function handleClick() {
        // ...
      }
      
      <button onClick={handleClick} />;
      
    • 而不是:

      <button
        onClick={() => {
          /* ... */
        }}
      />
      
  • 为处理器使用清晰的名称(handleSubmit、handleChange、handleClose)

  • 保持处理器简洁;将复杂逻辑提取到辅助函数中

副作用、数据与副作用处理

  • 避免将副作用用于:
    • 派生状态
    • 数据转换
    • 可放在处理器中的事件逻辑
  • 如果无法避免副作用,请保持其精简、隔离且有完善文档
  • 优先使用框架级或外部抽象(路由器、数据库),而不是原始副作用

Props 与组合

  • 优先使用组合,而不是配置
  • 避免过多的布尔 props;优先采用表达力更强的 API
  • 有意使用 children,并说明预期结构
  • 保持 prop 名称语义清晰且可预测

性能与稳定性

  • 优先仅在需要时保持引用稳定(而非默认如此)
  • 避免不必要的记忆化(memo、useCallback),除非绝对必要
  • 渲染列表时,保持 key 稳定且有意义

通用原则

  • 首先为人编写代码,其次才是编译器
  • 优先明确表达,而不是炫技
  • 以可读性和长期维护为优化目标
  • 如果某种模式显得复杂,请重新考虑组件边界

评论

支持 Markdown