当前位置:首页 > VUE

vue受控实现原理

2026-01-18 20:00:28VUE

Vue 受控组件的实现原理

Vue 中的受控组件通常指表单元素(如 inputselect 等)的值由 Vue 的数据状态(datav-model)驱动,而非由 DOM 自身管理。其核心是通过数据绑定和事件监听实现双向同步。

vue受控实现原理

数据绑定与响应式

Vue 通过 v-model:value + @input 实现受控:

vue受控实现原理

  • v-model 是语法糖,本质上是 :value 绑定和 @input 事件的组合。
  • 表单元素的值由 Vue 的响应式数据(如 data 中的属性)控制,数据变化时自动更新 DOM。
<template>
  <input v-model="message" />
</template>

<script>
export default {
  data() {
    return {
      message: ''
    }
  }
}
</script>

事件监听与更新

当用户输入时,Vue 通过事件监听(如 inputchange)捕获变化,并同步到数据状态:

  • v-model 默认监听 input 事件(文本类元素)或 change 事件(复选框等)。
  • 手动实现时需显式绑定 :value@input
<template>
  <input :value="message" @input="handleInput" />
</template>

<script>
export default {
  data() {
    return {
      message: ''
    }
  },
  methods: {
    handleInput(e) {
      this.message = e.target.value;
    }
  }
}
</script>

自定义组件中的受控

对于自定义组件,需通过 model 选项和 $emit 实现受控:

  • 使用 model 定义 propevent,替代默认的 valueinput
  • 子组件内部通过 $emit 触发事件,父组件更新数据。
<!-- 父组件 -->
<template>
  <CustomInput v-model="message" />
</template>

<!-- 子组件 -->
<template>
  <input :value="value" @input="$emit('input', $event.target.value)" />
</template>

<script>
export default {
  props: ['value'],
  model: {
    prop: 'value',
    event: 'input'
  }
}
</script>

与 React 受控组件的区别

  • Vue 的 v-model 简化了双向绑定,React 需手动实现 onChangevalue
  • Vue 的响应式系统自动处理依赖追踪,React 需通过 setState 显式更新。

通过上述机制,Vue 实现了数据与视图的自动同步,确保表单元素始终受控于数据状态。

标签: 原理vue
分享给朋友:

相关文章

vue路由实现内部切换

vue路由实现内部切换

Vue 路由实现内部切换的方法 Vue Router 是 Vue.js 官方的路由管理器,用于实现单页应用(SPA)的页面切换。以下是几种常见的内部路由切换方式: 使用 <router-lin…

vue实现生成二维码

vue实现生成二维码

使用qrcode.vue库生成二维码 安装qrcode.vue库: npm install qrcode.vue --save 在Vue组件中使用: <template> <…

vue实现树

vue实现树

Vue 实现树形结构的方法 使用递归组件实现树形结构 递归组件是Vue中实现树形结构的常见方式。通过组件调用自身,可以轻松构建多层嵌套的树形数据。 <template> <ul…

vue实现布局

vue实现布局

Vue 实现布局方法 Vue 提供了多种方式实现页面布局,可以通过组件化、CSS 框架或自定义样式完成。以下是几种常见方法: 使用 CSS Flexbox 或 Grid 通过 Vue 单文件组件结合…

vue 实现脚本

vue 实现脚本

Vue 实现脚本的方法 Vue.js 提供了多种方式来实现脚本功能,包括组件内脚本、混入(Mixins)、插件(Plugins)以及自定义指令等。以下是常见的实现方式: 组件内脚本 在 Vue 单文…

vue实现layout

vue实现layout

Vue 实现 Layout 布局的方法 在 Vue 中实现 Layout 布局通常涉及路由嵌套、组件化设计和动态渲染。以下是几种常见的实现方式: 使用嵌套路由 通过 Vue Router 的嵌套路由…