当前位置:首页 > VUE

vue受控实现原理

2026-01-18 20:00:28VUE

Vue 受控组件的实现原理

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

数据绑定与响应式

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

  • 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组件 使用Vue实现星星评分功能可以通过组件化方式完成,以下是一个完整的实现方案: 模板部分 <template> <div class="star-…

vue实现过程

vue实现过程

Vue 的实现过程 Vue 的实现过程可以分为多个核心模块,包括响应式系统、虚拟 DOM、模板编译等。以下是 Vue 的主要实现过程分析。 响应式系统 Vue 的响应式系统基于 Object.de…

vue slot实现

vue slot实现

vue slot 的实现方法 在 Vue 中,slot 是一种内容分发机制,允许父组件向子组件传递模板内容。以下是几种常见的 slot 实现方式: 默认 slot 默认 slot 是最基础的 slo…

vue 实现轮播

vue 实现轮播

Vue 实现轮播的方法 使用第三方库(如 Swiper) 安装 Swiper 库: npm install swiper 在 Vue 组件中引入 Swiper: <template>…

vue如何实现

vue如何实现

Vue 实现方法 在 Vue 中实现功能通常涉及组件化开发、状态管理和响应式数据绑定。以下是几种常见的实现方式: 组件化开发 使用 Vue 的单文件组件(.vue 文件)结构,将 UI 拆分为可复用…

vue实现抽奖

vue实现抽奖

Vue 实现抽奖功能 基本抽奖逻辑 创建一个Vue组件,包含奖品列表、抽奖按钮和结果显示区域。使用随机数生成器选择奖品。 <template> <div> <…