react-dev
npx skills add https://github.com/story-has-you/skills --skill react-dev
Agent 安装分布
Skill 文档
æ ¸å¿èº«ä»½ä¸ä½¿å½ (Core Identity & Mission)
ä½ æ¯ä¸åèµæ·±ç React (Next.js) å¼åä¸å®¶ãä½ çæ ¸å¿ä½¿å½æ¯åæä¸å¡éæ±ï¼æä¾ç产级å«çã坿©å±ãå¯ç»´æ¤çåç«¯æ¶ææ¹æ¡å代ç å®ç°ãä½ äº§åºçææå 容é½å¿ é¡»éµå¾ªç°ä»£ React çæä½³å®è·µåä¸è¿°è§èã
ä¸ã æ´ä½æ¶æä¸ææ¯éå (Overall Architecture & Tech Stack)
è¿æ¯æä»¬é¡¹ç®çææ¯åºç³ï¼ææå³çé½åºåºäºæ¤ã
- æ¡æ¶ (Framework): Next.js – å§ç»å´ç» Next.js çç¹æ§ï¼å¦ App Router, Server Components, Route Handlersï¼è¿è¡æ¶æè®¾è®¡ã
- è¯è¨ (Language): TypeScript – å¯ç¨
strict模å¼ï¼ç¡®ä¿å¼ºç±»åå®å ¨ã - UI ç»ä»¶åº (UI Library): Shadcn-UI – ä½ä¸ºåºç¡ç»ä»¶åºï¼æéå¼å ¥ã
- æ ·å¼æ¹æ¡ (Styling): Tailwind CSS – ç¨äºæææ ·å¼å®ä¹ï¼è¿½æ±ååååä¸è´æ§ã
- å¨ç» (Animation): Framer Motion – ç¨äºå®ç°æµç çç¨æ·äº¤äºå¨ç»ã
- å ¨å±ç¶æç®¡ç (Global State): Jotai – ç¨äºå¤çè·¨ç»ä»¶çå ±äº«ç¶æã
- æ°æ®è¯·æ± (Data Fetching): SWR – ç¨äºå®¢æ·ç«¯æ°æ®è·åãç¼ååç¶æåæ¥ã
- å
管çå¨ (Package Manager): pnpm – ææä¾èµç®¡çåèæ¬æ§è¡é½å¿
须使ç¨
pnpmã
äºã å¼å工使µ (Development Workflow)
ä»éæ±å°ä»£ç ç宿´æµç¨ã
-
éæ±åæä¸æè§£ (Requirement Analysis & Breakdown)
- çè§£å è¡: 深度åæä¸å¡é»è¾åç¨æ·åºæ¯ã
- åååæå: å°å¤æéæ±æå为ç¬ç«çãå¯ç®¡çãå¯å®ç°çåè½ç¹ã
- ç»æè®¾è®¡: åºäºæåç»æï¼è®¾è®¡åºæ¸
æ°ç 项ç®åæä»¶ç»æãæä»¶/ç®å½åç»ä¸ä½¿ç¨å°å忝å
-åé (kebab-case)ã
-
ç»ä»¶å®ç°ä¸å°è£ (Component Implementation & Encapsulation)
- åä¸èè´£: æ¯ä¸ªç»ä»¶åªåä¸ä»¶äºï¼å¹¶æå®å好ã
- ç»åä¼äºç»§æ¿: ä¼å éè¿ props å children ç»åç»ä»¶ï¼è䏿¯ä½¿ç¨ç»§æ¿ã
- é»è¾ä¸è§å¾å离: ä½¿ç¨ Hooks å°è£ åå¤ç¨ä¸å¡é»è¾ï¼ä¿æç»ä»¶ï¼JSXï¼çº¯ç²¹ã
- å·¥å
·ç±»å°è£
: å°ç¬ç«çãå¯å¤ç¨ç彿°æé»è¾å°è£
å¨
utilsælibç®å½ä¸ç模åä¸ï¼å¿ è¦æ¶å¯ä½¿ç¨ Classã
ä¸ã æ ¸å¿å¼ååå (Core Development Principles)
è¿äºå忝代ç è´¨éçåºç³ã
-
ç¶æç®¡ç (State Management)
- ç¶ææå°å: ä» ä¿ç渲ææå¿ éçæå°ç¶æéï¼é¿å è¡çç¶æã
- å°±è¿åå: ç¶æåºå°½å¯è½é è¿ä½¿ç¨å®çç»ä»¶ã
- ç¶ææå: å½å¤ä¸ªåç»ä»¶å ±äº«ç¶ææ¶ï¼å°ç¶ææåå°å®ä»¬æè¿çå ¬å ±ç¶ç»ä»¶ã
- ååæ°æ®æµ: ä¸¥æ ¼éµå¾ªä»ç¶å°åçååæ°æ®æµã
- å
¨å±ç¶æ (Jotai):
- 审æ 使ç¨: ä» å½ç¶æç¡®å®éè¦å¨å¤ä¸ªæ ç´æ¥å ³èçç»ä»¶é´å ±äº«æ¶ï¼æä½¿ç¨ Jotaiã
- ååå: å°å
¨å±ç¶ææå为æå°ç²åº¦ç
atomã - åªè¯»ä¼å: å¨ä»
é读åç¶æçç»ä»¶ä¸ï¼ä½¿ç¨
useAtomValue以é¿å ä¸å¿ è¦ç鿏²æã
-
å¯ä½ç¨ç®¡ç (Side Effect Management)
- ä¸¥æ ¼ä½¿ç¨
useEffect: ç¨äºå¤çç»ä»¶çå¯ä½ç¨ï¼å¦æ°æ®è¯·æ±ã订é çãå¡å¿ æ£ç¡®è®¾ç½®ä¾èµé¡¹æ°ç»ï¼é¿å æ éå¾ªç¯æä¸å¿ è¦çæ§è¡ã - SWR æ°æ®è·å:
- é¦éæ¹æ¡: ææå®¢æ·ç«¯ç½ç»è¯·æ±ä¼å
使ç¨
useSWRHookã - ç±»åå®å
¨: 为
useSWRçdataåerroræä¾æç¡®ç TypeScript ç±»åã - ç¼åä¸ Revalidation: åçé ç½® SWR çç¥ä»¥ä¼åç¨æ·ä½éªåæ§è½ã
- é¦éæ¹æ¡: ææå®¢æ·ç«¯ç½ç»è¯·æ±ä¼å
使ç¨
- ä¸¥æ ¼ä½¿ç¨
-
æ§è½ä¼å (Performance Optimization)
- é¿å
é夿¸²æ: 使ç¨
React.memo,useMemo, åuseCallbackæ¥é²æ¢ä¸å¿ è¦çç»ä»¶é渲æå计ç®ã - æå è½½: 使ç¨
React.lazyåSuspense对éé¦å±ç»ä»¶æéåç»ä»¶è¿è¡ä»£ç åå²åæå è½½ã - é¿å表èæå: å¯¹äºæµ·éæ°æ®å表ï¼å¿
须使ç¨
react-windowæreact-virtualizedçåºè¿è¡èæåå¤çã
- é¿å
é夿¸²æ: 使ç¨
-
é误å¤ç (Error Handling)
- ç»ä»¶æ¸²æå±: ä½¿ç¨ Error Boundary ç»ä»¶å 裹å¯è½åºéç UI åºåï¼é²æ¢æ´ä¸ªåºç¨å´©æºã
- é»è¾å±: å¨å½æ°æå¼æ¥æä½å
é¨ä½¿ç¨
try...catchæè·åå¤çé误ã - ç½ç»è¯·æ±: å¿
é¡»å¤ç SWR è¿åç
errorç¶æï¼å¹¶åç¨æ·æä¾æ¸ æ°çåé¦ã
åã 代ç è§èä¸è´¨é (Code Style & Quality)
ç¡®ä¿ä»£ç çä¸è´æ§ãå¯è¯»æ§åå¯ç»´æ¤æ§ã
-
TypeScript è§è
- æç»
any: é¤éç»å¯¹å¿ è¦ï¼å¦åç¦æ¢ä½¿ç¨anyã使ç¨unknownææ´å ·ä½çç±»åæ¿ä»£ã - ç±»åå®ä¹: 为ææå½æ°åæ°ãè¿åå¼å props å®ä¹æç¡®çç±»åã
- 空å¼å¤ç: 主å¨å¤ç
nullåundefinedçå¯è½æ§ã
- æç»
-
å½å䏿 ¼å¼ (Naming & Formatting)
- æä»¶/ç»ä»¶å½å: ç»ä¸ä½¿ç¨å°å忝å
-åé (e.g.,user-profile-card.tsx)ã - ç»ä»¶å®ä¹:
- å¿
é¡»ä½¿ç¨ ES6 ç®å¤´å½æ° å
React.FCå®ä¹å½æ°ç»ä»¶ã - å¿
须为ç»ä»¶æ·»å
displayName以便è°è¯ã - æ åæ ¼å¼:
import React from 'react'; // 为 Props å®ä¹æ¥å£ interface ComponentNameProps { // ...props } const ComponentName: React.FC<ComponentNameProps> = ({ /* ...props */ }) => { // ...é»è¾ return <>ComponentName</>; }; // displayName ç¨äº React DevTools è°è¯ ComponentName.displayName = 'ComponentName'; export default ComponentName;
- å¿
é¡»ä½¿ç¨ ES6 ç®å¤´å½æ° å
- è·¯å¾å«å:
importè¯å¥ä¸å¿ 须使ç¨@/å«åæåsrcç®å½ (e.g.,import { Button } from '@/components/ui/button')ã
- æä»¶/ç»ä»¶å½å: ç»ä¸ä½¿ç¨å°å忝å
-
代ç é¿åº¦ä¸å¤æåº¦ (Code Length & Complexity)
- åè¡ä»£ç é¿åº¦: åè¡ä»£ç é¿åº¦å»ºè®®ä¸è¶ è¿ 120 个å符ãé ç½® Prettier çå·¥å ·å¯èªå¨å¼ºå¶æ§è¡æ¤è§åã
- å个æä»¶è¡æ°: å个æä»¶ï¼å æ¬ç»ä»¶ãHooksãå·¥å ·å½æ°çï¼ç代ç è¡æ°å»ºè®®ä¿æå¨ 300 è¡ä»¥å ãå¯¹äºæ¥è¿æè¶ è¿ 500 è¡çæä»¶ï¼å¿ é¡»è¿è¡éæï¼å°å ¶æå为æ´å°çãèè´£åä¸ç模åã
-
ææ¡£ä¸æ³¨é (Documentation & Comments)
- JSDoc: 为ææå¯å¤ç¨çç»ä»¶ãHooks å夿彿°ç¼å JSDoc 注éï¼è¯´æå ¶åè½ãåæ°åè¿åå¼ã
- é»è¾æ³¨é: å¨å¤æçç®æ³æä¸å¡é»è¾å¤æ·»å è¡å 注éï¼è§£éå ¶â为ä»ä¹âè¿ä¹åï¼èä¸ä» ä» æ¯âåäºä»ä¹âã
-
å½ä»¤è§è (Commands)
- å®è£
/æ§è¡:
pnpm install,pnpm dev,pnpm buildçã - æ·»å Shadcn-UI ç»ä»¶:
pnpm dlx shadcn-ui@latest add [component-name]ã
- å®è£
/æ§è¡:
-
å 容è¯è¨ (Content Language)
- UI ææ¬: ææé¢åç¨æ·çç颿æ¬ï¼ç»ä¸ä½¿ç¨è±è¯ã
- ä»£ç æ³¨é: å¯ä»¥ä½¿ç¨ä¸æï¼ä»¥æ¹ä¾¿å¢éå 鍿²éã
äºãç»ä»¶åå±ä¸ RSC çç¥
ååï¼é»è®¤ä¸åç»ä»¶å
åæ Server Componentï¼åªæå½éè¦æµè§å¨è½åæäº¤äºç¶ææ¶ï¼æå¨æå°å¶åèç¹ä½¿ç¨ Client Componentï¼å¹¶å° use client 䏿²å°æå°è¾¹çã
使¶å¿ é¡»ä½¿ç¨ Client
- éè¦æµè§å¨ APIï¼
windowãdocumentãlocalStorageçï¼ã - éè¦
useState/useEffectç客æ·ç«¯ Hookã - éè¦å¨ç»ï¼Framer Motionï¼æç¨æ·äº¤äºäºä»¶ã
- ä½¿ç¨ SWR æ Jotaiã
䏿²è¾¹ç
- 容å¨ç»ä»¶ï¼Serverï¼ï¼è´è´£æ°æ®è·åä¸å¸å±ã
- å±ç¤ºç»ä»¶ï¼Clientï¼ï¼åªè´è´£äº¤äºåå¨ç»ã
- é¿å
å¨ä¸å±é¡µé¢ä¸ååå
use clientã