# 开发规范 > **文档版本**:v1.1 > **最后更新**:2025-01-18 --- ## 目录 1. [文件命名规范](#1-文件命名规范) 2. [组件编写规范](#2-组件编写规范) 3. [导入顺序规范](#3-导入顺序规范) 4. [Git Commit 规范](#4-git-commit-规范) --- ## 1. 文件命名规范 | 类型 | 命名规范 | 示例 | | --------- | ------------- | ------------------------- | | 组件文件 | PascalCase | `StoryboardItem.tsx` | | Hook 文件 | camelCase | `useStoryboards.ts` | | 工具文件 | camelCase | `formatDuration.ts` | | 类型文件 | camelCase | `storyboard.ts` | | 常量文件 | camelCase | `routes.ts` | | 样式文件 | kebab-case | `globals.css` | | 测试文件 | 原文件名.test | `StoryboardItem.test.tsx` | --- ## 2. 组件编写规范 ### 2.1 组件文件结构 ```typescript // 组件文件结构 import { useState, useCallback, memo } from 'react'; import { cn } from '@/lib/utils'; import { Button } from '@/components/ui/button'; import type { Storyboard } from '@types'; // Props 类型定义 interface StoryboardItemProps { storyboard: Storyboard; isSelected: boolean; onSelect: (id: string) => void; className?: string; } // 组件实现 export const StoryboardItem = memo(function StoryboardItem({ storyboard, isSelected, onSelect, className, }: StoryboardItemProps) { // Hooks const [isHovered, setIsHovered] = useState(false); // 事件处理 const handleClick = useCallback(() => { onSelect(storyboard.id); }, [storyboard.id, onSelect]); // 渲染 return (
setIsHovered(true)} onMouseLeave={() => setIsHovered(false)} >

{storyboard.title}

{storyboard.description}

); }); ``` ### 2.2 组件编写原则 1. **单一职责**:每个组件只负责一个功能 2. **Props 类型化**:所有 Props 必须定义类型 3. **使用 memo**:对于频繁渲染的组件使用 memo 优化 4. **事件处理**:使用 useCallback 缓存事件处理函数 5. **样式管理**:使用 cn 工具函数合并样式 --- ## 3. 导入顺序规范 ```typescript // 1. React 相关 import { useState, useEffect, useCallback } from "react"; // 2. 第三方库 import { useQuery } from "@tanstack/react-query"; import { z } from "zod"; // 3. 内部别名导入 - 组件 import { Button } from "@components/ui/button"; import { LoadingSpinner } from "@components/common"; // 4. 内部别名导入 - 其他 import { useStoryboards } from "@hooks/api/useStoryboards"; import { useEditorStore } from "@stores/editorStore"; import { cn } from "@/lib/utils"; // 5. 类型导入 import type { Storyboard } from "@types"; // 6. 相对路径导入 import { StoryboardItem } from "./StoryboardItem"; import "./StoryboardPanel.css"; ``` --- ## 4. Git Commit 规范 ### 4.1 Commit 消息格式 ``` ():