最近在试着用Cursor帮忙写一个带表格筛选和图表展示的后台页面,我本想着让它帮我生成一个简单的useState + useEffect组合就行。结果它直接给我塞了useMemo、useCallback,甚至还有个useSyncExternalStore,我查了下文档才勉强看懂。问题是,我项目里其实数据量不大,用户也就几十个人,真有必要上这些优化吗?还是说AI只是习惯性地堆代码?我现在有点纠结:是该跟着AI走,学一下这些新hook,还是坚持自己原来的写法,保持代码简单?有没有遇到过类似情况的朋友,你们一般怎么处理?
用Cursor写React组件时,AI总爱加一堆我没见过的hook,该不该信它?
全部回复
共 152 条说实话我太理解你这个纠结了,之前我用Copilot也遇到过一模一样的场景,它给我生成一个列表页直接上了useTransition和useDeferredValue,我盯着代码愣了半天。后来我琢磨了一下,发现AI其实是在“模仿最优解”,它训练数据里大量高star项目都这么写,所以它默认给你最“标准”的答案,根本不管你的实际场景。我现在处理方式是分两步:先让AI写,然后自己把那些hook逐个删掉,跑一遍看报不报错,如果删了功能还正常就果断不要。像useMemo和useCallback这种,在几十个人的后台里基本就是负优化,代码可读性变差不说,还有可能因为依赖项写错引入bug。但useSyncExternalStore这个我建议你多看一眼,它跟你数据量大小没关系,纯粹是处理外部状态源的好工具,学会了以后写全局状态管理会顺手很多。总的来说我的态度是:把AI当成一个爱炫技的实习生,它给的每一行代码都要问一句“为什么”,而不是“该不该信”,你自己能讲清楚理由,那用不用都不亏。
说实话我建议你信一半,像useMemo和useCallback在数据量小的时候确实属于过度设计,但useSyncExternalStore这个得看场景,如果后面要接实时数据或者多标签页同步,那它是正解。我的习惯是先让AI写出来,然后自己逐行过一遍,只保留能说清性能收益的部分,其余全部删掉,代码可读性永远比盲目优化重要。另外你也可以在Prompt里直接限定“只用useState和useEffect”,把AI的炫技空间关掉,这样反而能逼它把逻辑写得更清楚。
说实话我遇到好多次了,尤其是让AI改需求的时候,它特别喜欢把简单逻辑包装成花里胡哨的写法。我的做法是让它把那些hook删掉,先跑通再说,毕竟用户量小的时候useMemo和useCallback反而增加维护成本。不过我会留个心眼,看它用的hook是不是真的解决了什么潜在问题,比如useSyncExternalStore可能是在处理外部状态同步,如果确实有这层需求再学不迟。别怕拒绝AI的“好意”,代码是给人看的,不是给AI表演的。
我一般会先问它为啥要这么写,让它解释清楚每个hook解决了什么具体问题,说不出所以然就直接让它改回useState。说实话AI有时候就是照着最佳实践模板套,不考虑实际场景,几十个用户真没必要上这些。但反过来想,它这也算变相提醒你有些坑可能没注意到,比如表格筛选如果依赖复杂计算,useMemo确实能省事。关键还是看你自己能不能hold住,看不懂的代码宁愿不写。
我还真被它这么坑过,当时它给我上了一个useTransition,我查了半天才搞明白是干啥的。后来我的处理方式很简单:让它把代码改成我能一眼看懂的样子,然后自己手动把那些优化加回去,因为AI写的优化有时候逻辑是错的。不过你这情况我建议先跑个性能测试,要是没明显卡顿就坚持简单写法,等
我遇到过一模一样的,AI写代码确实有炫技倾向,尤其喜欢把简单问题复杂化。这种小项目用useState加个普通变量就够了,useSyncExternalStore明显是杀鸡用牛刀。我的建议是,先按自己的思路改回来,等真遇到性能瓶颈再针对性优化,顺便学一下这些hook也不迟。
其实你完全可以把它当成一个学习机会,但别被带着走。AI的代码更像是“标准答案”,不一定适合你的实际场景,代码可读性和团队认知成本也得算进去。我一般会让AI解释每段代码的理由,有用的吸收,没用的删掉。
还有一点,你项目里数据量小,用了useMemo反而可能因为依赖比较导致额外开销,得不偿失。别怕拒绝AI的建议,你的判断才是最终标准,写代码又不是考试,没必要全盘照抄。
说实话我跟你情况差不多,也踩过这坑。后来我给自己定了个规矩:让AI写之前,先把我想要的实现思路说清楚,限定它只用哪些hook,这样它就不敢乱发挥了。你那个数据量,确实没必要上useSyncExternalStore,别被它带偏了。
说实话我也遇到过,AI有时候确实喜欢炫技,但我觉得得看场景。几十个人的后台页面,useState加个普通函数完全够用,硬塞useSyncExternalStore纯属过度设计,反而增加维护成本。不过你可以把它当成学习机会,遇到不懂的hook就顺手查一下,懂了之后自己判断该不该用,别盲目照抄。我现在都是让AI先给个最简版本,它要是自作主张加东西,我就直接删掉,代码还是得自己心里有数。
说实话我也遇到过,Cursor有时候确实喜欢炫技,但它给的useMemo和useCallback在这种小项目里真没必要,反而增加阅读负担。不过useSyncExternalStore倒是个信号,可能它判断你的表格筛选状态有外部同步需求?我一般会先让它解释每段代码的用途,如果说不清楚就果断删掉,保持自己能维护的版本。另外你可以直接告诉它“保持简单,不要过度优化”,它通常会听话很多。
说实话我太懂你这个纠结了,我拿Cursor写业务代码也经常被它塞一堆“高级货”。我觉得关键不是要不要信它,而是得搞清楚它为什么这么写——很多情况下AI是照着它训练数据里的“最佳实践”模板来的,根本不管你的数据量级。像useSyncExternalStore这种,如果你没用外部状态管理库,纯属给自己找麻烦,后面维护的人看了都想骂人。我自己的处理方式是:让AI先按我的简单方案生成,跑通功能后,再单独问它“这里用useMemo能带来多大收益”,它会给你算个大概,那时候再决定要不要改。而且说实话,对于几十个用户的后台,useState加useEffect完全够用,性能瓶颈根本不在渲染上,反而多引入hook会增加心智负担。我上次让AI写了个筛选表格,它给每个回调都包了useCallback,后来我删了一半,代码清爽多了,也没见有任何性能问题。不过如果你对这个项目有长期规划,想借机学学新hook,那当练手也行,但别指望AI能真正理解“适度优化”的边界。反正我的原则是:AI给的方案先看懂再采纳,看不懂的坚决不迁就。
说实话我也踩过这个坑,后来想明白了:AI是根据“最佳实践”来写,但它不知道你的真实场景。几十个用户真没必要上useSyncExternalStore,那玩意主要是给状态管理库用的,你硬学反而增加维护成本。我现在的做法是让AI先按我的思路写,它如果加了复杂hook,我会追问一句“这里为什么不用简单写法”,然后自己判断取舍,毕竟代码是给人看的,不是给AI炫技的。
数据量小真没必要上这些,AI有时就是炫技,你按自己的写法来,代码能跑明白最重要。
我一般会看它给这些hook时有没有搭配合理的依赖数组和注释,如果纯粹是套模板,我就直接删掉换回useState。不过useSyncExternalStore这种确实有点过了,几十个用户的场景真没必要。我的做法是让AI先按我的思路写简单版,跑通后再问它有没有必要优化,这样它给的建议反而更准。
说实话我也踩过这个坑,后来想明白了:AI写代码是按“最佳实践”来的,不是按你的真实场景来的。几十个用户用useState完全没问题,真没必要为了炫技引入复杂度。我的做法是让它先解释每个hook解决什么痛点,如果我自己讲不清业务里对应不上,就直接让它删了重写。不过useSyncExternalStore那个确实少见,你要是项目里没用到外部状态源,基本可以无视。