classname-refactor
npx skills add https://github.com/forge-town/skills --skill classname-refactor
Agent 安装分布
Skill 文档
ClassName Refactor
ä»»å¡ç®æ
- æ¬ Skill ç¨äºï¼æ£æ¥å¹¶è½¬æ¢ä»£ç ä¸
className屿§ç模æ¿å符串为cn彿°è°ç¨ - è½åå å«ï¼éå½æä»¶å¤¹æ«æã详ç»ä½ç½®æ¥åãæ¹é转æ¢ãç»ææ±æ»
- è§¦åæ¡ä»¶ï¼ç¨æ·ä¸ä¼ æä»¶/æä»¶å¤¹å¹¶è¦æ±æ£æ¥/è½¬æ¢ className
æ ¸å¿åå
æææ¨¡æ¿å符串形å¼ç className å¿ é¡»è½¬æ¢ä¸ºè°ç¨ cn 彿°
- â é误ï¼
className={flex ${condition}} - â
æ£ç¡®ï¼
className={cn("flex", condition)}
å¿ é¡»å¯¼å ¥ cn 彿°
å¨è½¬æ¢åçæä»¶é¡¶é¨æ·»å æ åå¯¼å ¥è¯å¥ï¼
import { cn } from "@/lib/utils";
æ åæµç¨
ç¬¬ä¸æ¥ï¼è¯å«è¾å ¥ç±»åå¹¶é彿«æ
夿æ¯å个æä»¶è¿æ¯æä»¶å¤¹ï¼
- å个æä»¶ï¼ç´æ¥è¯»å该æä»¶å 容
- æä»¶å¤¹ï¼é彿«æææåæä»¶å¤¹ï¼ååºææ .tsx/.jsx/.vue æä»¶
ç¬¬äºæ¥ï¼é个æä»¶è¯¦ç»æ£æ¥
对æ¯ä¸ªæä»¶æ§è¡ä»¥ä¸æ£æ¥ï¼
- 读å宿´æä»¶å 容
- æ£æ¥æ¯å¦å·²å¯¼å ¥ cn 彿°
- æ«æææ className 屿§
- è®°å½æ¯ä¸ª className çä½ç½®ï¼æä»¶åãè¡å·ï¼åæ ¼å¼
- åç±»ç»è®¡ï¼
- ä½¿ç¨æ¨¡æ¿å符串ç classNameï¼å¿ 须转æ¢ä¸º cn 彿°è°ç¨ï¼
- ä½¿ç¨æ®éå符串ç classNameï¼ç¬¦åè¦æ±ï¼
- å·²ä½¿ç¨ cn 彿°ç classNameï¼ç¬¦åè¦æ±ï¼
ç¬¬ä¸æ¥ï¼çæè¯¦ç»æ¥å
æ 论æ¯å¦ç¬¦åè¦æ±ï¼é½è¦æ¾ç¤ºææ className çä½ç½®
æ¥åç»æ
ð æ«æå®æï¼å
±åç° X ä¸ªç®æ æä»¶
â
/ð æ£æ¥ç»æï¼[æ»ç»]
è¯¦ç»æ£æ¥æ¥åï¼
[æ¯ä¸ªæä»¶ç详ç»å表ï¼å
嫿件åãè¡å·ãclassName å
容ãç±»åæ æ³¨]
ð ç»è®¡æè¦ï¼
- æ«ææä»¶ï¼X 个
- className æ»æ°ï¼Y 个
- ä½¿ç¨æ¨¡æ¿å符串ï¼Z 个ï¼å¿
须转æ¢ä¸º cn 彿°è°ç¨ï¼
- 符åè¦æ±ï¼W 个
- éè¦å¯¼å
¥ cn 彿°ï¼N 个
[妿éè¦è½¬æ¢]
éè¦è½¬æ¢ä¸º cn 彿°è°ç¨çæä»¶ï¼
- æä»¶å表åè½¬æ¢æ°é
[妿éè¦å¯¼å
¥]
éè¦æ·»å cn 彿°å¯¼å
¥çæä»¶ï¼
- æä»¶å表
æ¥åæ æ³¨è¯´æ
- â ï¸ å¿ é¡»è½¬æ¢ä¸º cn 彿°è°ç¨ï¼ä½¿ç¨æ¨¡æ¿å符串ç className
- 符åè¦æ±ï¼æ®éå符串æå·²è°ç¨ cn 彿°
ç¬¬åæ¥ï¼æ§è¡è½¬æ¢ï¼ä» å¨éè¦æ¶ï¼
å°æ¨¡æ¿å符串转æ¢ä¸ºè°ç¨ cn 彿°ï¼è¾åºå®æ´ä»£ç ã
注æï¼å¦ææä»¶ä¸æªå¯¼å ¥ cn 彿°ï¼å¨è¾åºä»£ç æ¶æéç¨æ·æ·»å ï¼
import { cn } from "@/lib/utils";
ç¬¬äºæ¥ï¼éªè¯ä¸æé
- æ£æ¥å¯¼å ¥è¯å¥ï¼ååºéè¦æ·»å cn 彿°å¯¼å ¥çæä»¶
- æä¾è½¬æ¢æè¦
- 建议æµè¯éªè¯
转æ¢è§åï¼å¿ é¡»è°ç¨ cn 彿°ï¼
// è§å 1ï¼éæç±»å
className={`flex gap-4`}
â className={cn("flex gap-4")}
// è§å 2ï¼å¨æåé
className={`${myClass}`}
â className={cn(myClass)}
// è§å 3ï¼æ··å
className={`base ${dynamic}`}
â className={cn("base", dynamic)}
// è§å 4ï¼æ¡ä»¶è¡¨è¾¾å¼
className={`base ${isActive ? 'active' : ''}`}
â className={cn("base", isActive ? "active" : "")}
// è§å 5ï¼å¤ä¸ªåæ°
className={`base ${a} ${b}`}
â className={cn("base", a, b)}
cn 彿°å¯¼å ¥
æ åå¯¼å ¥æ¹å¼
cn 彿°çæ å导å
¥è·¯å¾ä¸º @/lib/utils
卿件顶鍿·»å ï¼
import { cn } from "@/lib/utils";
æ£æ¥å¯¼å ¥
转æ¢åï¼æ£æ¥æä»¶æ¯å¦å·²å¯¼å ¥ cn 彿°ï¼
- å¦æå·²å¯¼å ¥ï¼æ éé¢å¤æä½
- 妿æªå¯¼å ¥ï¼æéç¨æ·æ·»å å¯¼å ¥è¯å¥
å¯¼å ¥ä½ç½®
cn 彿°çå¯¼å ¥è¯å¥åºæ¾å¨æä»¶é¡¶é¨çå¯¼å ¥åºåï¼ä¸å ¶ä»å¯¼å ¥è¯å¥ä¸èµ·ã
import { useState } from "react";
import { cn } from "@/lib/utils";
import { Button } from "@/components/ui/button";
èµæºç´¢å¼
- references/conversion-rules.mdï¼è¯¦ç»è§åï¼
- references/examples.mdï¼ç¤ºä¾ææ¡£ï¼
注æäºé¡¹
- å¿ é¡»è°ç¨ cn 彿°ï¼æææ¨¡æ¿å符串形å¼ç className å¿ é¡»è½¬æ¢ä¸ºè°ç¨ cn 彿°
- å¿
须导å
¥ cn 彿°ï¼è½¬æ¢åçæä»¶å¿
须导å
¥ cn 彿°ï¼æ åè·¯å¾ä¸º
@/lib/utils - é彿«æï¼å¿ é¡»é彿«æææåæä»¶å¤¹ï¼ä¸è½éæ¼ä»»ä½æä»¶
- è¯¦ç»æ¥åï¼æ 论æ¯å¦ç¬¦åè¦æ±ï¼é½è¦æ¾ç¤ºææ className çæä»¶åè¡å·
- 宿´ç»è®¡ï¼æä¾å®æ´çç»è®¡æè¦ï¼å æ¬ææ className çæ°é
- åç±»æç¡®ï¼æ¸ æ¥æ 注æ¯ä¸ª className çç±»åï¼æ¨¡æ¿å符串/æ®éå符串/cn 彿°è°ç¨ï¼
- æµè¯éªè¯ï¼è½¬æ¢åå¿ é¡»æµè¯ç»ä»¶çæ¾ç¤ºææ
常è§é®é¢
Q: æä»¶å¤¹åµå¥å¾æ·±æä¹åï¼ A: é彿«æææåæä»¶å¤¹ï¼æ 论åµå¥å¤æ·±é½è¦æ«æã
Q: å¦ä½ç¡®ä¿ä¸éæ¼æä»¶ï¼ A: 使ç¨é彿«æï¼ååºææ .tsx/.jsx/.vue æä»¶ï¼éä¸ªæ£æ¥ã
Q: æä»¶å¤ªå¤æ¥åä¼å¾é¿åï¼ A: æä¾è¯¦ç»çåç±»æ¥ååç»è®¡æè¦ï¼ä¾¿äºå¿«éäºè§£æ´ä½æ åµã
Q: 为ä»ä¹è¦ä½¿ç¨ cn 彿°ï¼ A: cn 彿°æä¾äºæ´å¥½çå¯è¯»æ§ãç±»åå®å ¨åæ¡ä»¶ç±»åå¤çè½åã
Q: cn 彿°ä»åªé导å
¥ï¼
A: cn 彿°çæ å导å
¥è·¯å¾ä¸º @/lib/utilsã