vue3.4中的v-model的用法~

1.首先以前我们针对父子组件传参是不是通过defineProps与defineEmits来实现的,但是这么 比较繁琐,因为他是单向传参,而不是双向的,这里我们要介绍的是vue3.4的v-model来实现双向数据传递。

2、代码示例:

javascript 复制代码
//父组件
<template>
    <Add ref="addForm" v-model="drawerStates.add"></Add>
</template>

import Add from './add.vue'
const addForm = ref(null)
const drawerStates = reactive({
  add: false
})

//子组件
//父组件使用 v-model="state" 时,这个 state 值会传递给 modelValue prop
const props = defineProps({
  modelValue: Boolean//这是 Vue 3 中 v-model 的默认 prop 名称
})
// 定义组件可以触发的事件
// 当子组件触发这个事件时,父组件的 v-model 值会更新
const emit = defineEmits(['update:modelValue'])
// 创建一个计算属性 drawerOpen,用于双向绑定
const drawerOpen = computed({
    //  从父组件获取当前值
  get() {
    return props.modelValue
  },
    // 通知父组件值的变化
  set(value) {
    emit('update:modelValue', value)
  }
})
//这样在子组件内部可以像使用普通 ref 一样使用 drawerOpen.value

3、工作流程:

  1. 当父组件 drawerStates.add 变化 → 自动更新 props.modelValue

  2. 当子组件修改 drawerOpen.value → 触发 update:modelValue → 父组件 drawerStates.add更新

4、为什么这么写?

  1. 实现真正的双向绑定,而不仅仅是单向数据流

  2. 保持组件状态与父组件同步

  3. 符合 Vue 3 的组件通信规范

  4. 使组件可以像原生表单元素一样工作

相关推荐
lpfasd12343 分钟前
node-sass 停止维护!老项目迁移 Dart Sass 完整教程
前端·rust·sass
Data analyse4563 小时前
rnweb 回放数据量太大怎么办?分片存储与断点续传的实现思路
前端·网络·算法·数据分析
xiaogai_gai3 小时前
金蝶收料通知单查询策略实战教程:从源系统拉取到中间层落地的完整路径
java·前端·数据库
环境栈笔记4 小时前
指纹浏览器 WebRTC 怎么设置?从 ICE 候选、代理出口到功能验证
前端·人工智能·后端·自动化
赵大仁5 小时前
官网性能优化实战:LCP 3.2s → 2.1s、CLS 0.107 → 0,以及被我推翻的 6 个判断
前端·性能优化·cls·lcp·core web vitals
xiancai_xianyu5 小时前
Text2SQL落地生产库前,SQL要过哪三道闸
前端·数据库·sql·sql注入·text2sql·ai agent开发·企业级ai框架
小羊没烦恼!5 小时前
T-SQL查询进阶--理解SQL SERVER中的分区表
服务器·开发语言·前端·javascript·html
史瓦辛格5 小时前
给 DeepSeek Harness 写费用插件:把「这次会话花了多少钱」算准
前端·deepseek
星光不问赶路人5 小时前
Vue 3 + TypeScript 中 enum 的使用实践
前端·vue.js
鸥梨菌Honevid5 小时前
UVM 中 REQ 和 RSP 类型详解:从通信模型到 item_done 与 put_response
java·前端·servlet