最近从Copilot换到Cursor,确实爽,Tab补全和跨文件重构很顶。但用久了发现一个问题:我写React组件,自己脑子里先有个结构,AI一补全,经常直接把我带偏,甚至把props和state逻辑搞得很绕。有时候为了“顺着AI的思路”,反而写了更多自己都看不懂的代码。回头review,感觉代码风格都变了,不像自己写的。想问下各位,在AI辅助下,你们是坚持自己的架构思路,让AI当打字员,还是真的会接受AI的建议去重构逻辑?有没有什么工作流能避免这种“被带跑”的感觉?
Copilot和Cursor写前端越用越懵,大家怎么平衡AI代码和自己的思路?
全部回复
共 20 条先让AI按我的思路写具体实现,不顺眼的建议直接忽略,别让它反客为主。
我都是先自己写完整体结构再让AI填肉,补全只当打字机用,重构建议基本无视。
说白了AI是加速器不是导航仪,架构这玩意儿还得自己把着方向盘。
我倒是觉得这个问题核心不在AI,在于你对组件的边界定义够不够清晰。我现在的习惯是,先花两分钟把props的类型、state的流转、还有副作用触发条件在注释里写死,再让Copilot去填函数体,它基本不会跑偏。如果你脑子里只有个模糊结构,AI自然会按它见过的开源代码模式去猜,猜出来的东西当然绕。另外,跨文件重构这种功能我基本只用来改样式变量或者重命名,逻辑上的重组绝对不让它碰。我自己踩过的坑是,一旦接受了它给你加的一个useMemo或者callback,后面整个依赖链都会顺着它的风格走,最后代码确实不是你的了。所以我现在把AI当pair programmer里那个只打字的junior,架构怎么搭、状态放哪个层级,都得我先把伪代码注释写好,它只能写中间那些机械的部分。你要是觉得被带偏,就试试把大任务拆成特别小的指令,一次只让它干一件事,别让它一口气生成整个组件。
我也有同感,尤其是写组件的时候AI太爱“自作聪明”地补全状态逻辑了。现在我的做法是先自己把接口和数据结构定死,再让Copilot填函数体,遇到它给的花活直接忽略,只当它是高级自动补全,别让它参与架构决策。后来发现,只要不追求“一次Tab全对”,心态就稳多了,写错了再改也不丢人。
我一般先写注释把架构钉死,再让AI填肉,这样它带不偏你。
我都是先自己把组件拆好,AI只补细节,它一给复杂逻辑我就直接忽略,不然代码真的会失控。
我自己的办法是让AI只做“翻译器”,不做“架构师”。写组件前先把props和state的流转关系用注释或伪代码写死,再让AI去填肉,它一跑偏我就拿注释拽回来。而且我基本不用它的跨文件重构建议,那个太容易把hidden dependency带进来,review的时候比我自己写还费劲。你试试把大任务切成小函数再喂给它,每个函数逻辑越独立,它越不容易给你绕弯子。
先想好组件结构再让AI补细节,别让它替你定逻辑,不然真会越写越陌生。
我现在的做法是先把组件骨架和关键逻辑自己敲完,注释写好,再让AI补样式和边缘case。它一旦开始改我核心逻辑,我直接Ctrl+Z,别舍不得。还有个小技巧,把AI建议当“另一个同事的PR”看,不是照单全收,而是挑着merge。被带跑多半是因为自己还没想清楚就让它先动手了。
我现在的做法是先把组件骨架和状态流向自己敲完,哪怕只是几个空函数和注释,然后再让AI补细节。这样它补的东西有边界,不容易把整个结构带偏。Cursor有个好处是你可以选中特定代码块让它改,而不是全文件Tab,我基本都用Cmd+K局部改,很少让它整段生成。还有个习惯是每次AI给的逻辑我会先问自己一句“这玩意儿我能给同事讲清楚吗”,讲不清就删了重写,哪怕多花十分钟。说到底AI补的是表达式和样板,组件拆分、数据流向这些还是得自己拿主意。偶尔我也会故意让它重构一版,然后对比着看,但最终合入前一定会按自己的命名和分层再捋一遍。被带跑这事我觉得根本原因是偷懒让它替你想了,只要坚持“我定结构它填肉”,基本就还好。
我现在的做法是先把组件骨架和状态流转用注释写死在文件里,再让AI往里填实现。这样它补全的时候有明确边界,不容易把props和state搅成一团。之前我也被Cursor带偏过,尤其是它把useEffect和派生状态混在一起的时候,回头一看全是坑。后来我干脆给自己定了个规矩:涉及数据流向和组件拆分的决策,必须我自己先画出来,AI只能在我划定的范围内做重复劳动。还有个小技巧是每次接受补全前先扫一眼它改了哪些行,超过十行就停下来想想是不是真的需要。至于要不要接受AI的重构建议,我觉得得分场景,纯展示组件让它随便改,带副作用的逻辑我基本不信它。说到底AI是个加速器,但方向盘还是得自己握着,不然写出来的东西确实会越来越不像自己的。
我一般先自己把组件骨架和state理清再让AI补细节,它一跑偏就果断撤销,别惯着。
我现在的做法是先自己把组件骨架和state流写死,注释标清楚每个块干啥,再开Copilot补细节。它一旦往奇怪方向补,直接Esc拒掉,别惯着。Cursor的composer我基本只用来做跨文件重命名或者批量改import这种机械活。真要让它改逻辑,我会先开个新分支,改完diff对比,看不懂的直接扔。说白了就是把它当实习生,方案得自己拍板。
我也遇到过这情况,后来改成先自己把组件骨架和state逻辑手写出来,再让AI补样式和重复代码,它就没法带偏了。关键是别让AI在你还没想清楚之前就动手,Tab补全太顺手反而容易偷懒。还有个笨办法,把AI建议当code review看,不直接接受,先问自己它为什么这么改。慢慢就形成习惯了,AI还是打字员,思路得自己攥着。
我一般先自己把组件骨架和state流向写清楚再让AI补,不然它给的方案确实容易把简单逻辑绕成八爪鱼。Tab补全我基本只用来写重复的样式和类型定义,逻辑层尽量自己来。有个习惯是把AI建议当code review看,不直接accept,先问自己这版比我原来的好在哪。被带跑几次之后现在会刻意隔一阵就整个文件重读一遍,感觉不对就回退重写。
我现在的做法是先把组件骨架和状态流自己手写出来,哪怕只是伪代码级别的注释,然后再开Copilot补全。这样AI是在我画好的框里填肉,而不是它来画框。Cursor的Tab确实容易让人上头,尤其是它猜你想写什么的时候,但前端组件的props和state一旦被它带偏,后面debug的成本远高于省下的打字时间。我一般会把AI建议当code review看,它给的逻辑如果比我原来的更简洁,我会手动移植过来,而不是直接Tab接受。有个小技巧是写的时候关掉inline suggestion,只在需要查API或者写重复样式时才手动触发。另外review阶段我会用git diff逐块看,凡是自己解释不清的补全都revert重写。说到底AI是加速器,架构决策还是得自己扛,不然代码库迟早变成一锅风格大杂烩。
学到了,感谢分享!
写得挺好,建议补充一些性能数据。
学到了,感谢分享!
我一般是先自己把组件骨架敲完,再开AI补细节,不然真容易被它牵着走。