mcpField
B
bulletproof-react-patterns

bulletproof-react-patterns

github.com/grahamcrackers开发0153 次安装36 周前更新
代码仓库

关于 bulletproof-react-patterns

bulletproof-react-patterns 是面向 React 开发者的架构模式指南,基于 bulletproof-react,涵盖从项目结构到测试、安全与性能的实践。

主要功能

  1. 01按功能组织项目结构
  2. 02划分组件层级与 API 层
  3. 03区分客户端与服务端状态
  4. 04规划错误处理与测试策略
  5. 05涵盖安全和性能实践

适用场景

  1. 01规划大型 React 应用的目录结构
  2. 02为 API、状态和错误处理建立模式
  3. 03制定组件、集成及端到端测试方案

安装

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

$npx skills add https://github.com/grahamcrackers/skills --skill bulletproof-react-patterns

安装后在 Claude Code 中输入/bulletproof-react-patterns确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
api-layer.md
components-and-styling.md
error-handling.md
performance.md
project-standards.md
project-structure.md
README.md
security.md
state-management.md
testing.md

详细介绍

Bulletproof React 模式

用于构建可扩展、易维护的 React 应用的架构模式。基于 bulletproof-react。

核心参考

主题描述参考
项目结构基于功能组织、单向架构、ESLint 强制检查项目结构
组件与样式组件层级、封装第三方库、无头库与样式化库组件与样式
API 层API 客户端、请求声明、查询/变更钩子模式API 层
状态管理组件、应用、服务端缓存、表单和 URL 状态类别状态管理
错误处理错误边界、API 错误、使用 Sentry 跟踪错误错误处理
测试使用 Vitest、Testing Library、Playwright、MSW 进行单元、集成、端到端测试的策略测试
项目规范ESLint、Prettier、TypeScript、Husky、绝对导入、文件命名项目规范
安全身份验证、令牌存储、XSS 防护、RBAC/PBAC 授权安全
性能代码拆分、数据预取、状态优化、children 模式性能

项目结构

按功能组织,而不是按文件类型:

src/
├── app/                # Application shell (routes, providers, router)
├── assets/             # Static files (images, fonts)
├── components/         # Shared, reusable UI components
├── config/             # Environment variables, constants
├── features/           # Feature-based modules
├── hooks/              # Shared custom hooks
├── lib/                # Pre-configured library wrappers
├── stores/             # Global client state
├── testing/            # Test utilities, MSW handlers, factories
├── types/              # Shared TypeScript types
└── utils/              # Pure utility functions
功能模块
features/users/
├── api/            # API functions and query hooks
├── components/     # Feature-specific components
├── hooks/          # Feature-specific hooks
├── types/          # Feature-specific types
└── utils/          # Feature-specific utilities

规则:

  • 功能模块不应从其他功能模块导入内容。在应用层进行组合。
  • 代码按单一方向流动:共享 → 功能模块 → 应用。
  • 仅当有 2 个或更多功能模块复用时,才提升至共享目录。
  • 优先使用直接导入,而不是 barrel 重新导出,以便 Vite 进行树摇优化。

组件层级

Page Components          → route-level, compose features, handle layout
  └── Feature Components → feature-specific, business logic
        └── UI Components      → shared primitives, no business logic

API 层模式

// Pure API function
function getUsers(params?: GetUsersParams): Promise<UsersResponse> {
    return api.get("/users", { params });
}

// Query hook wrapping the API function
function useUsers(params?: GetUsersParams) {
    return useQuery({
        queryKey: ["users", params],
        queryFn: () => getUsers(params),
    });
}

状态管理边界

状态类型解决方案示例
服务端状态TanStack Query用户数据、帖子、API 响应
客户端状态(全局)Zustand / Jotai主题、侧边栏展开状态、用户偏好设置
客户端状态(本地)useState / useReducer表单输入、切换项、模态框展开状态
URL 状态URL 搜索参数 / 路由器筛选条件、分页、当前标签页
表单状态React Hook Form多步骤表单、验证

不要混用服务端状态和客户端状态。 永远不要将查询数据复制到 useState 中。

错误层级

App Error Boundary          → catches unrecoverable crashes
  └── Route Error Boundary     → catches route-level failures, shows retry
        └── Feature Error Boundary   → catches feature-specific errors

测试策略

层工具测试内容
组件Testing Library渲染输出、用户交互、a11y
HooksrenderHook状态变化、副作用
APIMSW请求/响应处理、错误状态
集成Testing Library + MSW完整功能流程(渲染 → 交互 → 验证)
E2EPlaywright关键用户旅程

约定

项目约定示例
组件PascalCaseUserCard.tsx
HookscamelCase,使用 use 前缀useUsers.ts
工具函数camelCaseformatDate.ts
类型PascalCaseUser、CreateUserInput
常量UPPER_SNAKE_CASEMAX_RETRIES
目录kebab-caseuser-settings/
文件kebab-caseuser-card.tsx
导入

使用路径别名,避免使用过深的相对导入:

import { Button } from "@/components/ui/button";
import { useUsers } from "@/features/users/api";

在 tsconfig.json 中将 @/ 配置为 src/ 的别名。

评论

支持 Markdown