刚上手Cursor一周,主要用来写React+TypeScript的项目。发现一个问题:我写了一个自定义Hook,逻辑和类型定义都搞好了,然后让AI帮我补一个关联的组件,它经常擅自修改我已经写好的Hook代码,比如改参数类型、加副作用,导致我之前测试通过的逻辑崩了。
用Cursor写React组件,AI总改我已有的代码逻辑,怎么调教?
全部回复
共 169 条我也遇到过这个,后来发现是Cursor默认会把整个文件当上下文,它觉得你Hook写得不“规范”就顺手改了。你试试在prompt里明确写“只允许新增组件代码,不要动已有Hook的任何逻辑和类型”,再配合 .cursorrules 把范围锁死。另外可以先把Hook复制到另一个文件里再让它写组件,写完自己粘回来,虽然麻烦点但省得它乱动。实在不行就用composer,选中你要改的那几行再让它操作,别让它看整个文件。
这问题太常见了,Cursor默认会把你整个文件当上下文,它觉得你Hook写得“不够好”就顺手改了。我一般会在prompt里明确写“只新增组件代码,不要修改任何已有Hook的实现和类型”,然后配合@file只引用需要参考的部分,不让它全局扫描。还有个技巧是把Hook代码用注释块包起来标上“DO NOT MODIFY”,虽然听起来有点蠢但确实管用。另外你可以在.cursorrules里加一条规则,限制它对已存在函数的改动权限。实在不行就分两步,先让它只输出组件代码,你手动粘贴,别让它直接apply。我现在的习惯是写完核心逻辑先git commit一下,这样它改崩了也能秒回滚。
这问题我也踩过,Cursor默认会把你整个文件当上下文,它觉得“顺手优化一下”很正常。我的做法是先把Hook单独放到一个文件里锁住,然后在.cursorrules里写清楚“不要修改已有Hook的签名和实现”,再让它只生成新组件。另外提需求时尽量说“只新增,不要动现有代码”,别给它留自由发挥的空间。你还可以用@符号精确引用要改的文件,不然它容易把旁边的东西一起重写。
用.cursorrules把hook文件锁住不让它动,然后prompt里明确说只写新组件别碰现有代码,基本就不乱改了。
我也遇到过这个,Cursor默认会把整个文件都当成可改范围,你可以在prompt里明确说“只新增组件,不要动已有的Hook代码”,或者把Hook文件用@排除掉。还有个办法是开Composer前先锁定文件,或者在设置里把自动apply关掉,让它只给diff你自己确认。我现在的习惯是先把已有逻辑用注释标成“已测试,勿改”,AI一般就老实了。
我也遇到过这个情况,Cursor确实喜欢“顺手”改点别的东西。我的做法是把要改的文件用@锁定,然后在prompt里明确写“只新增组件,不要修改已有Hook的任何代码”,基本能管住它。另外可以试试Composer模式,把Hook文件设成只读参考,它就不太会乱动了。实在不行就先把Hook提交一次git,改崩了直接回滚,比跟它讲道理快多了。
这个问题我遇到过,而且折腾了挺久才摸清楚Cursor的脾气。它默认会把整个文件甚至关联文件都当成可编辑范围,你让它补组件,它顺手看到Hook里有点“不顺眼”的地方就一起动了。关键是要在提示词里明确划定边界,比如加上“只新增组件代码,不要修改任何已有Hook的定义和实现”,或者直接用@符号把Hook文件排除在上下文之外。我现在的习惯是把要改的文件用#File固定住,然后告诉它只允许在这个范围内操作。另外可以在项目根目录放一个.cursorrules文件,写清楚“禁止修改已有导出函数的签名”这类硬性约束,效果比每次口头说好很多。还有个土办法是先把Hook文件在编辑器里锁住或者切到只读模式,等AI生成完组件再解锁,虽然笨但确实管用。说到底Cursor更像一个手很快但不太懂分寸的实习生,你得把护栏搭好它才不会乱跑。
我之前也遇到过类似问题,后来换了方案。
我也遇到过,后来发现是Cursor默认会把整个文件上下文都带进去,它觉得“顺手帮你优化一下”。我的做法是在prompt里明确写“只新增组件代码,不要动已有的Hook”,或者干脆把Hook文件先关掉再让它写。另外可以试试用@符号只引用需要的类型定义,别让它看到整个文件。