当前位置:首页 > 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中,可以通过结合DOM操作、Canvas绘制及第三方库实现。以下是具体方法: 使用html2canvas库实现…

vue实现按钮组轮换

vue实现按钮组轮换

实现按钮组轮换的方法 在Vue中实现按钮组轮换效果可以通过动态绑定类和事件处理来完成。以下是一种常见的实现方式: 模板部分 <template> <div class="…

vue中如何实现循环

vue中如何实现循环

在 Vue 中实现循环 Vue 提供了 v-for 指令用于实现循环渲染列表数据。v-for 可以遍历数组、对象或数字范围,生成动态的 DOM 元素。 遍历数组 使用 v-for 遍历数组时,语法为…

vue实现走势图

vue实现走势图

Vue 实现走势图的方法 使用 ECharts 库 ECharts 是一个强大的数据可视化库,支持多种图表类型,包括走势图(折线图)。在 Vue 项目中可以通过 vue-echarts 封装库或直接使…

vue实现分屏

vue实现分屏

Vue 实现分屏的方法 分屏功能通常用于展示多个独立内容区域,以下是几种常见的实现方式: 使用 CSS Grid 布局 通过 CSS Grid 可以轻松创建分屏布局,在 Vue 组件中直接应用样式:…

vue全选实现

vue全选实现

Vue 全选实现方法 在 Vue 中实现全选功能通常涉及数据绑定和事件处理。以下是几种常见的实现方式: 基础实现方式 <template> <div> <i…