1. 从一句感慨说起:前端开发的“手感”到底指什么
“写前端又找回当年的感觉了”——这句话我第一次看到的时候,心里咯噔了一下。不是因为某个具体模型版本号,而是因为“当年的感觉”这五个字,戳中了太多写了七八年前端的人。所谓当年的感觉,说白了就是:脑子里想一个界面,手上敲出来的代码几乎不用大改,浏览器一刷新,跟想象中八九不离十。没有来回查文档、没有反复调间距、没有为了一个响应式断点折腾半小时。
这几年前端工程化越来越重,框架、构建工具、状态管理、类型系统层层叠加,写一个页面要动的文件从1个变成8个。效率是上去了,但那种“所见即所得”的直觉反馈反而被稀释了。所以当有人用某个模型辅助写前端,重新体验到“描述即产出”的顺畅感时,会发出这种感慨,我完全能理解。
这篇内容我想聊的不是某个具体产品的评测,而是围绕“用大模型辅助前端开发”这件事,把背后的工作流、提示词设计、代码质量控制、常见翻车场景,以及怎么把它真正嵌进日常开发里,掰开揉碎讲清楚。适合已经有一定前端基础、想提升产出效率的开发者,也适合刚入行、想借助工具快速建立手感的新人。核心不是“让AI替你写”,而是“让AI把你脑子里的界面快速翻译成可运行的代码”,这个定位一旦摆正,体验会完全不同。
2. 为什么大模型写前端这件事突然“好用了”
2.1 前端代码的天然结构,正好撞上大模型的强项
前端开发和后端开发有一个本质区别:前端的产出是视觉可验证的。后端接口对不对,你得写测试、造数据、跑链路才能确认;前端页面对不对,浏览器一开,肉眼三秒就能判断。这个特性决定了大模型在前端场景下的容错成本极低——它写错了,你一眼就能看出来,改起来也快。
再往深一层看,前端代码有极强的模式化特征。一个卡片组件、一个表单、一个列表页,结构高度重复,无非是标签嵌套、样式类名、事件绑定这几件事。大模型在海量代码上训练过,对这种模式的捕捉非常准。你给它一个“带搜索框和分页的表格”的描述,它脑子里其实已经匹配到了成百上千个类似结构,输出自然靠谱。
还有一个容易被忽略的点:前端代码的局部性很强。改一个按钮的颜色,基本不会影响别的模块。这意味着即使模型某次输出有小瑕疵,修复范围也是可控的,不会像后端那样一个逻辑错误引发连锁反应。这种“低耦合、高可视、强模式”的三重特性叠加,就是大模型写前端体验突然变好的底层原因。
2.2 从“补全一行”到“生成一个页面”的跨越
早期用AI写代码,体验基本停留在“我敲个函数名,它帮我补全参数”这个层面,本质还是代码补全器。但现在不一样了,你可以直接描述一个完整界面,它给你吐出结构完整、样式合理、逻辑能跑的组件代码。这个跨越背后是上下文窗口的扩大和指令遵循能力的提升。
我实测过一个对比:同样一句“做一个深色模式的登录页,左边是插画区,右边是表单,表单包含邮箱、密码、记住我和登录按钮”,两年前的工具会给你一堆零散的片段,你得自己拼;现在能直接给你一个可以复制进项目就跑的完整组件,连响应式断点都帮你考虑到了。这种从“零件供应商”到“整装交付”的转变,才是“找回当年感觉”的真正来源——你不再是在拼装,而是在描述。
2.3 一个关键认知:它是加速器,不是替代品
这里必须泼一盆冷水。大模型写前端好用,前提是你自己得懂前端。它生成的代码,你得能判断哪里对、哪里不对、哪里虽然能跑但不符合项目规范。我见过太多新人直接复制粘贴,结果样式冲突、事件冒泡、内存泄漏一堆问题,排查起来比自己写还慢。
正确的定位是:它是一个极其高效的“初稿生成器”和“重复劳动消除器”。布局、样式、样板逻辑这些不需要动脑子的部分交给它,业务逻辑、边界处理、性能优化这些需要判断的部分自己来。这个分工一旦明确,效率提升是实打实的,而且不会埋下技术债。
3. 核心工作流拆解:我是怎么用它写页面的
3.1 第一步永远是“拆”,不是“问”
很多人用不好这类工具,问题出在第一步:上来就丢一句“帮我写个后台管理系统”。这种颗粒度的需求,模型只能给你一个空壳,因为后台管理系统这四个字背后有无数种可能。正确的做法是先拆再问。
我的习惯是把一个页面拆成三层:结构层、样式层、逻辑层。结构层就是DOM骨架,有哪些区块、区块之间什么关系;样式层是布局方式、配色、间距、响应式规则;逻辑层是数据从哪来、交互怎么响应、状态怎么管理。拆完之后,我通常先让模型生成结构层,确认骨架对了,再补样式,最后加逻辑。
这个顺序不能乱。因为结构错了,样式和逻辑全是白搭;而结构对了,样式和逻辑即使模型写得一般,改起来也快。我踩过的坑就是一开始图省事,让它一次性全生成,结果结构里多了一个莫名其妙的容器div,导致后面所有样式都得跟着调,反而更慢。
3.2 提示词里必须交代的四件事
经过大量实测,我发现一个高质量的前端生成提示词,必须包含四个要素,缺一个效果就打折:
- 技术栈明确:用什么框架、什么样式方案、什么组件库。不说清楚,它可能给你React代码,而你项目是Vue,或者用Tailwind而你项目是SCSS。
- 结构描述具体:不要只说“一个卡片”,要说“一个横向卡片,左侧是80x80的圆角头像,右侧上方是标题下方是两行描述文字”。
- 交互行为说明:点击哪里发生什么、悬停有什么效果、数据为空时显示什么。
- 约束条件:代码风格、命名规范、是否需要无障碍属性、是否要兼容移动端。
我一般会用一个固定的提示词模板,把这几块填进去。模板这东西看着死板,但能保证每次输出的下限,省得每次重新组织语言。
3.3 一个真实可复现的提示词示例
下面是我常用的一个模板,以生成一个“带筛选功能的数据列表页”为例:
技术栈:React 18 + TypeScript + Tailwind CSS 组件要求:函数式组件,使用 hooks 结构描述: - 顶部是一个筛选栏,包含一个关键词输入框、一个状态下拉选择、一个日期范围选择器、一个查询按钮、一个重置按钮 - 中间是数据表格,列包括:名称、状态、创建时间、操作 - 操作列有两个按钮:编辑、删除 - 底部是分页器,显示总数、每页条数选择、上一页下一页 交互行为: - 点击查询触发数据请求(先用 mock 数据) - 点击重置清空所有筛选条件 - 删除按钮点击后弹出二次确认 - 表格数据为空时显示空状态提示 约束条件: - 所有交互元素要有 aria-label - 移动端筛选栏自动换行 - 代码加中文注释这个模板的好处是,模型拿到之后几乎没有歧义,输出的代码基本能直接用。你可以根据自己的项目习惯调整,但四个要素的框架建议保留。
4. 代码质量控制:怎么判断它写得好不好
4.1 三个必须人工过一遍的检查点
模型生成的代码,我从来不会直接提交。有三个地方是必查的:
第一是事件处理。模型有时候会写出内联的箭头函数,在列表渲染里这会导致每次渲染都创建新函数,性能有隐患。还有事件冒泡,比如删除按钮在表格行里,点击删除可能同时触发行点击,得手动加阻止冒泡。
第二是状态更新的时机。尤其是涉及异步请求的场景,模型容易写出“请求还没回来就更新状态”的代码,或者忘记处理loading和error状态。这些在简单demo里看不出来,一上真实数据就出问题。
第三是样式的边界情况。长文本会不会溢出、超长列表会不会卡、小屏幕下布局会不会崩。模型生成的样式通常只考虑了“理想数据”,边界情况得自己补。
4.2 用“可运行性”和“可维护性”两把尺子量
判断一段生成代码合不合格,我用两个标准。可运行性是底线:复制进项目,不报错、能渲染、交互正常。可维护性是上限:变量命名是否清晰、逻辑是否拆分合理、有没有硬编码的魔法数字、注释是否到位。
很多生成代码能过第一关,过不了第二关。比如它可能把一长串逻辑全塞在一个useEffect里,能跑,但后面你想改一个地方,得把整段读完。这种情况我会让它重构,提示词就写“把这段逻辑按职责拆成多个函数,每个函数只做一件事”。通常它能改得不错。
4.3 建立自己的“代码规范提示词”
每个团队都有自己的代码规范,与其每次生成后手动改,不如把规范写进提示词。我整理了一份常用的规范清单,直接附在提示词末尾:
| 规范项 | 具体要求 |
|---|---|
| 命名 | 组件用大驼峰,函数和变量用小驼峰,常量用全大写下划线 |
| 组件 | 单个组件不超过200行,超出则拆分 |
| 样式 | 优先用工具类,复杂样式抽成独立文件 |
| 类型 | 所有props和state必须有类型定义,禁止any |
| 注释 | 复杂逻辑必须有注释,简单逻辑不写废话注释 |
| 导入 | 按第三方库、内部模块、样式文件分组 |
把这张表贴进提示词,生成代码的规范符合度能提升一大截。这个投入是一次性的,回报是长期的。
5. 实操全流程:从零做一个页面
5.1 环境与前置准备
假设我们要做一个“个人作品集展示页”,技术栈定为React + TypeScript + Tailwind。前置准备其实很简单,一个能跑React的开发环境,Tailwind配好,就这些。不需要额外装什么插件,模型生成的是标准代码,你的项目能跑就行。
我建议单独开一个临时文件或者临时分支来接收生成代码,确认没问题再合并进主分支。这样即使生成的东西有问题,也不会污染你的工作区。这个习惯看着小,但能省很多事。
5.2 分阶段生成与验证
第一阶段:生成页面骨架。提示词描述清楚页面有哪几个区块:顶部导航、Hero区、作品网格、关于我、页脚。让它先只输出结构,不带样式。拿到之后我检查区块顺序和嵌套关系对不对。
第二阶段:补样式。在骨架基础上,描述每个区块的视觉要求。比如Hero区要“大标题居中、副标题灰色、下方一个主按钮”。这一步生成完,页面基本就有样子了。
第三阶段:加交互。导航栏滚动时固定、作品卡片悬停放大、点击作品弹出详情。这些交互逐个加,加一个测一个。
第四阶段:响应式适配。明确告诉它断点规则,比如“小于768px时导航折叠成汉堡菜单,作品网格从三列变一列”。这一步最容易出问题,生成完一定要在浏览器里拖动窗口实测。
5.3 关键参数与配置说明
Tailwind的配置里,有几个参数直接影响生成效果。比如theme.extend里的颜色和间距,如果你项目有自定义的设计系统,最好在提示词里说明,否则模型会用默认值,跟你的设计稿对不上。
响应式断点也是。Tailwind默认的断点是sm 640、md 768、lg 1024、xl 1280,如果你项目改过,一定要在提示词里写清楚。我遇到过一次,模型按默认断点生成,结果项目里md被改成了900,导致平板尺寸下布局错乱,排查了半天才发现是断点对不上。
还有一个容易忽略的是字体和行高。模型默认用的行高有时候偏紧,中文显示会挤。我一般会在提示词里加一句“正文行高1.6,标题行高1.3”,出来的效果就舒服多了。
6. 常见翻车场景与排查手册
6.1 样式不生效的三种典型原因
生成代码样式不生效,九成是这三个原因:类名拼写错误、样式优先级被覆盖、Tailwind的purge配置把动态类名删了。第一个好查,肉眼比对;第二个用浏览器开发者工具看计算样式,找到覆盖它的规则;第三个最隐蔽,如果你用了字符串拼接生成类名,比如text-${color}-500,Tailwind在生产构建时会扫不到,得改成完整类名的映射。
6.2 交互逻辑的隐蔽bug
模型生成的交互逻辑,最常见的bug是状态不同步。比如筛选条件变了但列表没刷新,或者弹窗关闭了但状态没重置。这类问题的根源通常是useEffect的依赖数组写漏了,或者状态更新用了旧值。排查方法是把关键状态打日志,看更新时机对不对。
还有一个是事件重复绑定。在useEffect里绑定了事件监听,但没写清理函数,组件卸载后监听还在,导致内存泄漏或者重复触发。这个在开发环境不一定看得出来,上线后长时间运行才暴露。养成习惯,看到addEventListener就找对应的removeEventListener。
6.3 一份速查表
| 现象 | 可能原因 | 排查方向 |
|---|---|---|
| 页面白屏 | 组件报错未捕获 | 看控制台报错,检查props类型 |
| 样式错乱 | 类名冲突或断点不符 | 开发者工具看计算样式 |
| 点击无反应 | 事件未绑定或冒泡被阻 | 检查onClick和stopPropagation |
| 数据不更新 | 依赖数组遗漏 | 检查useEffect依赖 |
| 移动端溢出 | 固定宽度或未设max-width | 检查width相关样式 |
| 列表卡顿 | 未加key或key重复 | 检查map的key值 |
这张表我贴在工位上,遇到问题先对一遍,大部分情况能快速定位。
7. 把工具嵌进日常:我的实际使用节奏
7.1 什么场景交给它,什么场景自己来
我的分工很明确。交给它的:静态页面布局、表单结构、列表渲染、样式调整、样板代码、类型定义、单元测试骨架。自己来的:业务逻辑的核心判断、性能敏感的计算、复杂的状态流转、跟后端接口的对接细节、安全相关的处理。
这个分工不是拍脑袋定的,而是根据“出错成本”来的。布局错了,改改样式就行;业务逻辑错了,可能引发数据问题,修复成本高得多。所以越是靠近数据和核心逻辑的地方,越要自己把控。
7.2 一个提高复用率的小技巧
每次生成出满意的代码,我会把提示词和结果一起存进一个“片段库”。下次遇到类似需求,直接改改提示词就能复用。时间长了,这个库就成了自己的加速器。比如我现在做表单页,基本不用从零描述,调出之前的模板改几个字段就行。
这个库还有个隐藏价值:它能帮你沉淀出自己的提示词风格。你会发现某些表述方式模型理解得特别准,某些表述它总是误解,慢慢就形成了一套自己的“方言”。
7.3 关于“手感”的再思考
回到开头那句话。所谓找回当年的感觉,本质上不是工具变强了,而是反馈回路变短了。当年写jQuery,改一行刷新一下,立刻看到效果;后来工程化把反馈回路拉长了,改一个样式要等构建、等热更新。现在用模型辅助,你描述完立刻拿到代码,刷新就能看,反馈回路又短回来了。
但这里有个前提:你得保持对代码的掌控感。如果完全放手让模型写,自己不看不想,那反馈回路再短也没用,因为你根本不知道发生了什么。工具是放大器,放大的是你原本的能力。你懂前端,它让你更快;你不懂,它让你更快地写出烂代码。
8. 几个我踩过的坑和对应经验
8.1 别让它一次生成太多
贪多是最大的坑。我试过让它一次生成整个页面的所有代码,结果文件几百行,里面藏着好几个小问题,排查起来比重新生成还慢。后来改成一次只生成一个区块,每个区块控制在50行以内,问题一目了然,改起来也快。这个“小步快跑”的节奏,比“一次到位”靠谱得多。
8.2 版本和依赖要盯紧
模型训练数据有时间截止点,它可能用了一些已经废弃的API或者旧版本的写法。比如某些库的v3和v4写法差异很大,它可能给你v3的。生成完一定要对照当前项目的依赖版本检查一遍,尤其是那些breaking change比较频繁的库。
8.3 注释和文档别偷懒
生成的代码如果直接进项目,注释最好自己再过一遍。模型写的注释有时候是废话,比如// 设置状态这种,有时候又漏掉了关键逻辑的说明。我一般会把废话注释删掉,在复杂逻辑处补上自己的说明。这个习惯短期看费时间,长期看省时间,因为三个月后回来看代码的是你自己。
8.4 保持怀疑,保持验证
最后一条也是最重要的:永远保持怀疑。模型输出的任何代码,在没跑通之前都只是“看起来对”。我见过太多次“语法完全正确、逻辑完全错误”的情况。验证的方式很简单:跑起来、点一遍、看控制台、看网络请求。这四步做完,基本能筛掉大部分问题。剩下的边界情况,靠测试用例兜底。
这套工作流我用了大半年,最大的感受是:它没有让我变懒,反而让我有更多精力去关注那些真正需要思考的部分——架构怎么设计、状态怎么组织、性能瓶颈在哪。重复劳动被压缩了,创造性工作的空间就出来了。这可能才是“找回当年感觉”的真正含义:不是回到过去,而是把过去那种纯粹的、专注于解决问题的状态,重新找回来。