你可能写过几十个中后台列表页,从最早用 v-model 到后来自定义 hooks,再到封装组件、状态缓存、schema 驱动。
但同样是一个列表页:
我们就以这个最常见的中后台场景:搜索 + 分页 + 表格 + 编辑跳转,来看看三个阶段的认知差异到底在哪。
写完 vs 写清楚 vs 写系统。
等级 | 开发目标 |
---|---|
初级 | 页面能用,接口通,功能不报错 |
中级 | 页面结构清晰、组件职责明确、状态复用 |
高级 | 页面只是 DSL 映射结果,字段配置驱动生成,具备平台能力 |
等级 | 做法 |
---|---|
初级 |
el-form + v-model + 手写查询逻辑 |
中级 | 封装 SearchForm.vue ,支持 props 字段配置 |
高级 | 使用字段配置 schema,支持字段渲染、联动、权限控制、字典动态加载 |
等级 | 做法 |
---|---|
初级 | 表格写死在页面中,columns 手动维护 |
中级 | 封装 DataTable 组件,支持 columns + slots |
高级 | 表格由字段配置自动渲染,支持国际化、权限、字典映射、格式化 |
高级阶段的表格是“字段中心驱动下的视图映射”,而不是手写 UI 组件。
等级 | 做法 |
---|---|
初级 |
router.push + 返回后状态丢失 |
中级 | 缓存搜索条件和分页,支持跳转回填 |
高级 | 路由状态与组件状态解耦,编辑行为可抽象为弹窗、滑窗,不依赖跳转 |
体验上,初级只能靠刷新;中级保留了状态;高级压根不跳页,抽象为状态变更。
等级 | 做法 |
---|---|
初级 | 页面写死 status === 1 ? '启用' : '禁用'
|
中级 | 使用全局字典表:getDictLabel('STATUS', val)
|
高级 | 字段中心统一配置字段含义、展示方式、权限与控件类型,一份声明全平台复用 |
高级不写字段映射,而是写字段定义。字段即规则,规则即视图。
你以为工程感是“项目结构清晰”,其实高级工程感是:
一切都能预期,一切都能对齐。
你说“接口还没好我就做不了页面”。你说“等产品图出了我再看组件拆不拆”。
但高级前端早就开始:
useXXX
模块推动业务流转;配合和推进,只有一线之隔。
你遇到过哪些“看似很忙,实则在原地转圈”的开发场景?
最典型的,就是以下这三类“中后台系统里的低水平重复劳动”:
status === 1 ? '启用' : '停用'
;📉 问题:代码冗余,字段维护困难,一改动就全局找引用。
✅ 提升方式:
fieldSchema
);searchForm: {}
、search()
、reset()
;📉 问题:页面逻辑分散、复用性差,体验割裂。
✅ 提升方式:
useSmartListPage()
统一管理列表页状态;this.$router.push({ path, query })
;📉 问题:编辑与跳转强耦合,逻辑割裂,流程不清。
✅ 提升方式:
组件抽象不清、slot 滥用、props 大杂烩、逻辑耦合 UI,写完一个别人不敢接的黑盒。
中级组件关注复用,高级组件关注职责边界和组合方式,具备“可预测性、可替换性、可拓展性”。
你能写页面,但你未必能独立交付项目。缺的可能是:
从写完一个页面,到撑起一个系统,中间差的是 “体系构建力”。
初级在交付页面,中级在建设结构,高级在定义规则。
真正的高级前端,已经不写 “页面” 了,而是在定义 “页面该怎么写”。
转自:喝拿铁的桔子 顺便给大家分享一下,民族企业大厂前后端测试捞人,待遇给的还不错,感兴趣的可以来试试!