Vue3 v-bind 和 v-model 对比

1. 基本概念

1.1 v-bind

  • 单向数据绑定
  • 从父组件向子组件传递数据
  • 简写形式为 :

1.2 v-model

  • 双向数据绑定
  • 父子组件数据同步
  • 本质是 v-bind 和 v-on 的语法糖

2. 基础用法对比

2.1 表单元素绑定

<!-- v-bind 示例 -->
<template><input :value="text" @input="text = $event.target.value" />
</template><script setup>
import { ref } from 'vue'
const text = ref('')
</script><!-- v-model 示例 -->
<template><input v-model="text" />
</template><script setup>
import { ref } from 'vue'
const text = ref('')
</script>

2.2 组件属性绑定

<!-- v-bind 方式 -->
<template><CustomInput:value="searchText"@input="searchText = $event"/>
</template><!-- v-model 方式 -->
<template><CustomInput v-model="searchText" />
</template>

3. 主要区别

3.1 数据流向

<!-- v-bind: 单向数据流 -->
<ChildComponent:title="pageTitle"  <!-- 数据只能从父组件流向子组件 -->
/><!-- v-model: 双向数据流 -->
<ChildComponentv-model="pageTitle"  <!-- 数据可以双向同步 -->
/>

3.2 实现原理

<!-- v-bind 原理 -->
<ChildComponent :value="value" /><!-- v-model 原理(等价于) -->
<ChildComponent:modelValue="value"@update:modelValue="value = $event"
/>

3.3 自定义组件实现对比

<!-- 使用 v-bind 的组件 -->
<template><div><input:value="value"@input="$emit('input', $event.target.value)"/></div>
</template><script setup>
defineProps(['value'])
defineEmits(['input'])
</script><!-- 使用 v-model 的组件 -->
<template><div><input:value="modelValue"@input="$emit('update:modelValue', $event.target.value)"/></div>
</template><script setup>
defineProps(['modelValue'])
defineEmits(['update:modelValue'])
</script>

4. 使用场景对比

4.1 适合使用 v-bind 的场景

<!-- 1. 纯展示数据 -->
<template><div :class="className"><h1 :title="headerTitle">{{ title }}</h1><img :src="imageUrl" :alt="imageAlt" /></div>
</template><!-- 2. 传递回调函数 -->
<template><button :onClick="handleClick">点击</button>
</template><!-- 3. 动态属性 -->
<template><div :[dynamicProp]="value"></div>
</template>

4.2 适合使用 v-model 的场景

<!-- 1. 表单控件 -->
<template><input v-model="username" /><textarea v-model="description"></textarea><select v-model="selected"><option value="">请选择</option></select>
</template><!-- 2. 自定义组件的数据同步 -->
<template><CustomInput v-model="searchText" /><ColorPicker v-model="themeColor" /><DatePicker v-model="selectedDate" />
</template><!-- 3. 多个数据的双向绑定 -->
<template><UserFormv-model:firstName="user.firstName"v-model:lastName="user.lastName"/>
</template>

5. 性能考虑

5.1 v-bind

  • 单向数据流,性能开销较小
  • 适合大量数据的展示场景
  • 不会触发额外的更新事件

5.2 v-model

  • 双向绑定,需要监听变化
  • 涉及父子组件的数据同步
  • 可能触发多次更新

6. 最佳实践

  1. 选择原则

    • 仅需展示数据时使用 v-bind
    • 需要数据同步时使用 v-model
    • 考虑性能影响选择合适的方式
  2. 代码可维护性

    • v-bind 更直观,易于追踪数据流向
    • v-model 代码更简洁,但需要注意数据追踪
  3. 性能优化

    • 合理使用计算属性
    • 避免不必要的双向绑定
    • 大量数据展示场景优先使用 v-bind

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/893766.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mybatis-plus 更新 Null 的策略踩坑记

一个bug 在一个管理页面&#xff0c;有一个非必填字段被设置成空了并提交更新&#xff0c;再次打开的时候&#xff0c;发现字段还在&#xff0c;并没有被更新成功。 使用的数据库映射框架是 Mybatis-plus &#xff0c;对于Mybatis 在更新字段的时候会对空进行校验&#xff0c;…

Linux第一讲--基本的命令操作

从今天开始&#xff0c;我将在csdn这个平台上和大家分享Linux的相关知识&#xff0c;欢迎大家一起讨论&#xff01; 零、基本操作 1.进入全屏&#xff1a; ALTENTER,退出也是这个 2.复制&#xff1a;ctrlinsert 3.粘贴&#xff1a;shiftinsert Linux中&#xff0c;cv是不好…

[CISCN2019 华东南赛区]Web41

进入题目页面如下 点击链接但发现 各种尝试无果 看了一个大佬的博客&#xff0c;链接如下 BUUCTF&#xff1a;[CISCN2019 华东南赛区]Web4-CSDN博客 给了很大的提示&#xff0c;大佬尝试了file:///etc/passwd无果&#xff0c;猜测Flask&#xff0c;尝试local_file:///读取文…

make controller vibrate and 判断是否grab

我自己的例子&#xff0c;新建cube上挂载oculus交互的代码&#xff0c;如下 然后加载自己写的代码到cube上就可以了 using Oculus.Interaction.HandGrab; using System.Collections; using System.Collections.Generic; using UnityEngine;public class Vibtation : MonoBehav…

渗透测试技法之口令安全

一、口令安全威胁 口令泄露途径 代码与文件存储不当&#xff1a;在软件开发和系统维护过程中&#xff0c;开发者可能会将口令以明文形式存储在代码文件、配置文件或注释中。例如&#xff0c;在开源代码托管平台 GitHub 上&#xff0c;一些开发者由于疏忽&#xff0c;将包含数据…

图像加解密

图像加解密是保护图像数据安全和隐私的重要技术手段,它通过特定的算法对图像进行加密处理,使其在传输或存储过程中难以被未授权方理解和获取信息,而合法用户则可以使用相应的解密算法还原图像内容。以下是图像加解密的一般流程和常见方法: 图像加密 选择加密算法 常见的图…

9.business english-agreement

reach agreement 达成协议&#xff0c;达成一致意见 After hours of negotiation, the two parties finally reached agreement. build consensus 达成共识&#xff0c;指通过沟通&#xff0c;协商等方式&#xff0c;最后达成共同看法和意见 We need to build consensus amo…

ubuntu调用图形化网络测试工具

在 Ubuntu 中&#xff0c;除了命令行工具外&#xff0c;还有一些图形化的网络测试工具可以帮助你更直观地测试和分析网络性能。以下是几款常用的图形化网络测试工具及其使用方法&#xff1a; 1. gnome-nettool gnome-nettool 是一个简单的图形化网络工具集&#xff0c;包含 pi…

Vue.js 高级组件开发

Vue.js 高级组件开发&#xff1a;构建一个智能动态表单生成器 ——从可复用架构到性能优化的全链路实践 引言&#xff1a;为什么需要高级组件&#xff1f; 在现代前端开发中&#xff0c;组件不仅是UI的封装&#xff0c;更是业务逻辑的载体。一个“高级”Vue组件应当具备&…

基于C++的DPU医疗领域编程初探

一、大型医院数据处理困境与 DPU 的崛起 在数字化浪潮的席卷下,医疗行业正经历着深刻变革,大型医院作为医疗服务的核心枢纽,积累了海量的数据,涵盖患者的基本信息、诊断记录、检验报告、影像资料等多个维度。这些数据不仅规模庞大,而且增长速度迅猛,传统的中央处理器(C…

【记录】日常|从零散记录到博客之星Top300的成长之路

文章目录 shandianchengzi 2024 年度盘点概述写作风格简介2024年的创作内容总结 shandianchengzi 2024 年度盘点 概述 2024年及2025年至今我创作了786即84篇文章&#xff0c;加上这篇就是85篇。 很荣幸这次居然能够入选博客之星Top300&#xff0c;这个排名在我之前的所有年份…

详解最基本的数据顺序存储结构:顺序表

新的一年&#xff0c;我觉得这张图很合适&#xff01;有梦想&#xff0c;敢拼&#xff0c;马上就是除夕了&#xff0c;希望新的一年我们逢考必过&#xff0c;事事顺心&#xff0c;看见朝阳的你是不是嘴角微微上扬&#xff01; 本篇从0基础白话文讲述顺序表的概念、用法、注意事…

字节跳动发布UI-TARS,超越GPT-4o和Claude,能接管电脑完成复杂任务

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

移动光猫怎么自己改桥接模式?

环境&#xff1a; 型号H3-8s 问题描述&#xff1a; 家里宽带用的是H3-8s 光猫&#xff0c;想改桥接模式。 解决方案&#xff1a; 1.默认管理员账号和密码&#xff1a; 账号&#xff1a;CMCCAdmin 密码&#xff1a;aDm8H%MdAWEB页面我试了登陆不了&#xff0c;显示错误 …

Java 在包管理与模块化中的优势:与其他开发语言的比较

在开发复杂的、规模庞大的软件系统时&#xff0c;包管理和模块化设计起着至关重要的作用。它们不仅决定了代码的组织和可维护性&#xff0c;还直接影响到团队协作效率、扩展性和性能。在众多编程语言中&#xff0c;Java 凭借其成熟的生态系统、强类型系统和标准化的包管理机制&…

MYSQL学习笔记(六):聚合函数、sql语句执行原理简要分析

前言&#xff1a; 学习和使用数据库可以说是程序员必须具备能力&#xff0c;这里将更新关于MYSQL的使用讲解&#xff0c;大概应该会更新30篇&#xff0c;涵盖入门、进阶、高级(一些原理分析);这一篇是内容较少&#xff0c;主要讲解&#xff1a;聚合函数和简要介绍sql语句执行过…

【EXCEL_VBA_实战】多工作薄合并深入理解

工作背景&#xff1a;多个工作薄存在冲突的名称&#xff0c;需快速合并 困难点&#xff1a;工作表移动复制时&#xff0c;若有冲突的名称&#xff0c;会不断弹出对话框待人工确认 思路&#xff1a;利用代码确认弹出的对话框 关键代码&#xff1a;Application.DisplayAlerts …

【Java数据结构】排序

【Java数据结构】排序 一、排序1.1 排序的概念1.2 排序的稳定性1.3 内部排序和外部排序1.3.1 内部排序1.3.2 外部排序 二、插入排序2.1 直接插入排序2.2 希尔排序 三、选择排序3.1 选择排序3.2 堆排序 四、交换排序4.1 冒泡排序4.2 快速排序Hoare法&#xff1a;挖坑法&#xff…

Java数据结构 (链表反转(LinkedList----Leetcode206))

1. 链表的当前结构 每个方框代表一个节点&#xff0c;每个节点包含两个部分&#xff1a; 左侧的数字&#xff1a;节点存储的值&#xff0c;例如 45、34 等。右侧的地址&#xff08;如 0x90&#xff09;&#xff1a;表示该节点 next 指针指向的下一个节点的内存地址。 例子中&a…

Linux查看服务器的内外网地址

目录&#xff1a; 1、内网地址2、外网地址3、ping时显示地址与真实不一致 1、内网地址 ifconfig2、外网地址 curl ifconfig.me3、ping时显示地址与真实不一致 原因是dns缓存导致的&#xff0c;ping这种方法也是不准确的&#xff0c;有弊端不建议使用&#xff0c;只适用于测试…