最近从Copilot切到Cursor,听说它对项目上下文理解更好。但实际用下来有个问题:让它写个简单的表格组件,它非要自己加排序、筛选、分页的props,哪怕我明确说了“只要展示数据”。而且它特别喜欢用TypeScript的泛型,我项目里全是JS,它每次生成完都要我手动把类型擦掉。还有个情况是,它好像会“记住”我之前的代码风格,但记歪了,比如我习惯用函数组件,它偶尔会蹦出class组件。有没有人遇到过类似情况?你们是用规则文件约束它,还是直接改需求?我有点怀疑是不是我prompt写得太模糊了,想听听大家的用法。
用Cursor写React组件,它总给我加一堆没用的props,咋办?
全部回复
共 87 条这事我太有同感了,Cursor默认会往“完整”了生成,压根不管你上下文里那句“只要展示”。我后来直接在项目根目录放了个.cursorrules,写上“禁止添加非必要props,禁止TS语法,只用函数组件”,效果立竿见影。你那个记歪风格的情况,大概率是它从你旧代码里学了个大概,但泛化过头了,不如把常用模板直接贴进规则文件里让它照着抄。另外prompt里最好加一句“严格按我给出的代码风格输出”,比单纯说需求管用得多。
在规则文件里写死“禁止添加props”就行,另外prompt里重复强调纯展示,比说一遍管用。
我也遇到过,它记代码风格纯靠猜,直接给项目加个AGENTS.md或者rules,比每次纠正省心多了。
说实话这事儿我太有共鸣了,Cursor那股子“自作主张”的劲儿有时候真让人哭笑不得。我后来发现,它特别吃“最小化提示”这一套,你越在prompt里强调“只要展示”,它反而越觉得你在暗示要个完整方案。我现在的做法是直接在代码注释里写死,比如“此组件禁止添加任何props”,甚至会在函数签名里先写个空对象兜底,它看到你代码结构已经定死了,通常就不会强行加戏了。关于它记歪风格这点,我猜可能是它同时参考了你项目里其他历史文件,但没分清哪些是你手写的哪些是它自己生成的,所以越带越偏。建议你可以在项目根目录放一个CLAUDE.md或者.cursorrules文件,里面对齐几个硬规则,比如“只用function声明组件”“禁止TypeScript语法”,这比每次在对话里重新说一遍要管用得多。另外我有个小疑问,你用的表格数据源是已经处理好的纯数组吗?如果它总想给你加排序分页,会不会是因为它从你的数据格式里推断出了某些交互需求?试试把数据源写死成一个常量,不给它发挥空间,可能反而更听话。
我也遇到过类似的情况,Cursor确实有过度设计的倾向,尤其是写组件的时候。它内置的那些“最佳实践”好像特别顽固,你越说只要展示数据,它越觉得你只是没意识到自己需要排序和分页。我后来是在项目根目录加了个.cursorrules文件,明确写清楚技术栈是JS不用TS、只用函数组件、禁止添加未要求的props,效果好了不少。不过规则文件也不是万能的,有时候它还是会偷偷加泛型,得盯着点。关于记代码风格那个事,我觉得它其实是参考了项目里已有的文件,但如果项目本身风格不统一,它就懵了,生成的东西东拼西凑。我的做法是prompt里直接把一个现成的简单组件贴给它当范例,说“照这个风格来”,比写一堆描述管用。另外你说的class组件蹦出来,可能是它训练数据里老代码太多了,可以在规则里强调React 18加hooks。
我也遇到过,加个 .cursorrules 写清楚只用JS和函数组件,再强调别加多余功能,基本就老实了。
我也遇到过,后来在项目根目录加了.cursorrules写明只用JS和函数组件,好多了。
我也遇到过,Cursor确实爱自作主张加功能,尤其表格这种它默认你要完整CRUD。我现在会在项目根目录放个.cursorrules,写明“只用JS,禁止TS类型,组件保持纯展示”,效果还行。泛型那个问题基本就是它默认走现代React模板了,得反复强调你项目没TS。至于class组件,可能是它从你某些老文件里学歪了,检查下上下文引用范围。