最近在跟风用Cursor写一个内部管理系统的前端,用的React 18 + TypeScript。但发现AI生成的代码里,动不动就给我整class组件和componentDidMount这种老写法,或者用ReactDOM.render那种已经废弃的API。我明明在项目里设了React版本和tsconfig,也试过在prompt里强调“用hooks”,但效果不稳定。是不是我项目配置哪里没给对?还是说应该加个什么规则文件?求老哥指点一下,不想每次都得手动改一遍。
用Cursor写React组件,AI老爱生成过时语法怎么破?
全部回复
共 147 条试试在项目根目录加个.cursorrules,把不准用class组件和废弃API写死进去,比prompt管用多了。
说实话我跟你遇到一模一样的情况,后来发现问题可能不在tsconfig,而是Cursor的索引没吃到你项目里实际用的React版本。你可以试试在项目根目录加一个CLAUDE.md,里面直接写死“本项目使用React 18函数组件和Hooks,禁止class组件和componentDidMount”,然后把常用的hooks写法示例贴进去,这样AI每次生成前都会先读这个文件,比prompt里临时强调管用得多。另外我怀疑它有时候是参考了网上旧教程的训练数据,所以你可以在生成后立刻按一次Ctrl+Enter让它重新改写,或者用斜杠命令调一个针对性的规则。还有个土办法,就是把自己的组件文件结构在项目里铺好,比如多建几个用hooks写的示例组件,AI会模仿你现有代码风格,比单纯文字约束强。不过说实话,React 19都快出了,这种老语法问题以后可能会更严重,建议顺手装个eslint插件自动检测废弃API,至少能少点手动返工。
这个问题我前两天刚踩完坑,八成不是你项目配置的锅,是Cursor的模型在训练数据里吃太多老代码了,尤其是那种企业内部项目的样本。我试过把“只允许使用函数组件和hooks”直接写进项目根目录的CLAUDE.md里,然后每次对话开头甩一句“strict mode: react18+ts,禁止class组件”,效果会稳定很多。你也可以试试在组件文件顶部加上一行注释,比如// ai: use hooks only,有时候比prompt管用。另外,如果它还是输出ReactDOM.render,大概率是它没读到你的入口文件,你可以在生成前手动把index.tsx里那段旧代码贴进对话里当参考。最狠的一招是装个eslint插件,让报错直接打断它的生成流程,强制它修正,我试过几次后它明显收敛了。只能说这类工具用起来得靠“调教”,别指望一次配好就省心,多试几轮prompt模板,找到适合你项目的那套话术就行。
这问题我也踩过坑,光在prompt里说用hooks没用,得把项目里的eslint和tsconfig严格模式开起来,AI读代码上下文的能力比听指令强多了。另外可以试试在项目根目录放个AGENTS.md,里面明确写死“禁止class组件、必须用函数式+react hooks”,效果比对话里强调稳定得多。还有个小技巧,把React版本用package.json锁死到18.2,然后让AI先读一遍现有组件的写法再生成,它就会模仿你的代码风格了。
这问题我也踩过,后来在项目根目录加了 .cursorrules 文件,把技术栈和禁用写法写清楚,比如“只用函数组件和hooks,禁止class和ReactDOM.render”,效果稳了不少。另外可以在Cursor设置里把系统提示词也带上这些约束,双管齐下。还有个小技巧是让它参考你项目里已有的组件文件,生成风格会一致很多。
我也遇到过这问题,后来发现光靠prompt不够稳,得在项目根目录加个.cursorrules文件,把技术栈和代码规范写死,比如明确要求只用函数组件加hooks、禁用class和ReactDOM.render。另外可以扔一两个你写好的组件当范例进去,让AI照着风格来。tsconfig和package.json它其实不一定读,规则文件才是重点。
项目根目录加个.cursorrules文件,把技术栈和禁用写法写清楚,比prompt里反复强调管用多了。