Vue 3 表单双向绑定核心是用 reactive 管理多字段对象或 ref 管理单字段,v-model 直接绑定;重置需还原响应式数据而非清空 DOM,推荐保存初始值并 Object.assign 恢复。

Vue 3 中实现多个表单输入项的响应式双向绑定,核心是用 reactive 或 ref 创建响应式数据源,再通过 v-model 绑定到各输入控件;重置则只需将响应式对象恢复初始值即可。关键不在“写多少行”,而在结构清晰、可维护、不丢失响应性。
用 reactive 管理整个表单对象
适合字段较多、逻辑关联强的场景(如用户注册、地址编辑):
- 定义一个 reactive 对象,包含所有字段及其初始值,例如:
const form = reactive({ username: '', email: '', password: '', agree: false }) - 模板中直接使用 v-model="form.username"、v-model="form.email" 等,无需额外解构或中间变量
- 新增字段时,只需在 reactive 对象里加一项 + 模板里加一行绑定,零逻辑修改
用 ref 声明单个字段(适合少量、独立字段)
适合字段少、彼此无强依赖的简单表单(如搜索框+筛选开关):
递归分析 Vue 项目组件依赖,从入口文件生成组件层级图,支持 Vue 2/3,输出组件名、文件路径和属性。适用于分析组件结构、排查依赖或了解项目架构。
- 每个字段单独用 ref 声明:
const keyword = ref(''); const category = ref('all'); - 模板中绑定 v-model="keyword" 和 v-model="category"
- 注意:ref 变量在模板中直接使用,不用写
.value;但在 script 中读写需加.value
一键重置表单的可靠做法
重置不是清空 DOM,而是还原响应式数据——否则 v-model 会失去同步基础:
立即学习“前端免费学习笔记(深入)”;
- 预先保存初始状态(推荐):
const initialForm = { username: '', email: '', password: '', agree: false };
const form = reactive({ ...initialForm });
const reset = () => Object.assign(form, initialForm); - 避免直接赋值
form = reactive({...}),这会切断响应式连接,导致后续绑定失效 - 若用 ref 管理单字段,重置就是逐个赋值:
keyword.value = ''; category.value = 'all';
进阶:子组件多字段双向绑定(父子通信)
当表单被封装为子组件,父组件需统一管理数据时:
- 子组件接收一个对象 prop(如
modelValue),用 watch 同步初始化本地 reactive 副本 - 所有输入框绑定到该副本,再用另一个 watch 监听副本变化,触发
emit('update:modelValue', {...}) - 父组件用 v-model="userForm" 即可实现对象级双向绑定,增删字段不影响父组件调用方式

















