vue3 ——笔记 (表单输入,监听器)

表单输入

在Vue 3中,v-model指令的用法稍有不同于Vue 2。在Vue 3中,v-model指令实际上是一个语法糖,它会自动将value属性和input事件绑定到组件或元素上,以实现双向数据绑定。

在自定义组件中使用v-model时,需要在组件内部定义modelValueupdate:modelValue属性,以及在适当的时候触发update:modelValue事件来更新数据。

下面是一个示例,演示如何在Vue 3中创建一个带有自定义v-model的组件:

<template><div><input :value="modelValue" @input="updateModelValue($event.target.value)" placeholder="Enter some text"><p>{{ modelValue }}</p></div>
</template><script>
import { defineComponent, ref } from 'vue';export default defineComponent({props: {modelValue: String},emits: ['update:modelValue'],setup(props, { emit }) {const internalValue = ref(props.modelValue);const updateModelValue = (value) => {internalValue.value = value;emit('update:modelValue', value);};return {modelValue: internalValue,updateModelValue};}
});
</script>

在这个示例中,我们定义了一个带有modelValue属性和update:modelValue事件的自定义组件。在组件内部,我们使用ref函数创建了一个响应式变量internalValue,并在updateModelValue方法中更新这个变量的值,并且触发update:modelValue事件。

在父组件中使用这个自定义组件时,可以像下面这样使用v-model指令:

<CustomInput v-model="message" />

这样,当用户在输入框中输入文本时,message变量的值会自动更新,并且在页面上显示出来。

总结来说,Vue 3中的v-model指令仍然用于实现双向数据绑定,但在自定义组件中的使用方式有所变化,需要在组件内部手动处理输入事件和值的更新。

监听器

在组合式api中,可以使用watch函数在每次响应式状态发生变化时触发回调函数

Watch(监听的变量,回调函数)

第一个参数 可以是不同形式的数据源, 但不能直接监听响应式对象的属性值 得到只是值

需要用一个返回该属性的getter属性

watch函数是一个用于监视特定的响应式数据变化并执行回调函数的函数。与watchEffect不同的是,watch函数可以监视特定的响应式数据,并且可以提供更多的控制选项。

<template><div><p>Count: {{ count }}</p><p>Double Count: {{ doubleCount }}</p><button @click="increment">Increment</button></div>
</template><script>
import { ref, watch } from 'vue';export default {setup() {const count = ref(0);const doubleCount = ref(0);watch(count, (newCount, oldCount) => {console.log('Count has changed:', newCount);doubleCount.value = newCount * 2;});const increment = () => {count.value++;};return {count,doubleCount,increment};}
};
</script>

在上面的代码中,我们同样首先导入了refwatch函数。然后在setup函数中创建了两个响应式的变量countdoubleCount。使用watch函数来监视count的变化,并在回调函数中更新doubleCount的值为count的两倍。

当点击“Increment”按钮时,count的值会增加,这会触发watch的回调函数执行,并更新doubleCount的值。

这就是watch函数在Vue 3中的基本用法和代码演示。相比watchEffectwatch函数可以提供更多的控制选项,例如可以监视多个响应式数据、可以配置是否立即执行回调函数等。

深层监听器

直接给watch() 传入一个响应式对象,会隐式地创建一个深层监听器---该回调函数在所有嵌套变更时都会触发

{deep:true}  强制转换为深度监听 深度监听会监听对象中的所有嵌套属性

及时回调的监听器

Watch 默认时懒加载:仅数据变化时才执行回调

{immeditate:true} 创建监听器时,立即执行一次   强制监听器的回调立即执行

watchEffect

watchEffect是一个用于监视响应式数据变化并执行副作用函数的函数。当监视的响应式数据发生变化时,副作用函数会被重新执行。

<template><div><p>Count: {{ count }}</p><button @click="increment">Increment</button></div>
</template><script>
import { ref, watchEffect } from 'vue';export default {setup() {const count = ref(0);watchEffect(() => {console.log('Count has changed:', count.value);// 在这里可以执行任何副作用代码,比如更新DOM、发送网络请求等});const increment = () => {count.value++;};return {count,increment};}
};
</script>

在上面的代码中,我们首先导入了refwatchEffect函数。然后在setup函数中创建了一个响应式的count变量,并使用watchEffect函数来监视count的变化。每当count发生变化时,watchEffect中的副作用函数会被执行,这里我们简单地输出了count的值到控制台。

当点击“Increment”按钮时,count的值会增加,这会触发watchEffect中的副作用函数执行,并将新的count值输出到控制台。

watch vs watchEffect

在Vue 3中,watchwatchEffect都是用于监视响应式数据变化并执行副作用函数的函数,但它们之间有一些重要的区别:

  1. watch

    • watch函数需要指定要监视的响应式数据,可以监视多个数据。
    • watch函数可以提供更多的控制选项,例如可以配置是否立即执行回调函数、可以配置深度监视等。
    • watch函数的回调函数接收两个参数:新值和旧值。
    • watch函数适用于需要精确控制监视行为的情况,例如监视特定的数据变化并执行特定的操作。
  2. watchEffect

    • watchEffect函数不需要指定要监视的响应式数据,它会自动追踪在副作用函数中使用的所有响应式数据。
    • watchEffect函数没有提供额外的控制选项,简单易用。
    • watchEffect函数的副作用函数会在组件渲染时立即执行一次,并在其中使用的响应式数据发生变化时重新执行。
    • watchEffect适用于简单的副作用代码,例如更新DOM、发送网络请求等。

总的来说,watch适用于需要精确控制监视行为的情况,而watchEffect适用于简单的副作用代码。在实际开发中,根据具体需求选择合适的函数来监视响应式数据的变化。

回调的触发时机

当更改响应式状态,它可能会同时会触发vue组件更新和监听器回调

默认情况下,用户创建的监听器回调,都会在vue组件更新之前被调用。这意味着你在监听器回调中访问的dom

是vue更新之前的状态

如果想在 监听器中访问 vue更新之后的dom  flush:'post'

停止监听器

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

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

相关文章

数组的扩容与缩容

数组的扩容与缩容 文章目录 数组的扩容与缩容数组的扩容内存分析 数组的缩容内存分析内存分析 数组的扩容 数组扩容是指当原有数组的空间不足以容纳更多的元素时&#xff0c;创建一个新的、长度更大的数组&#xff0c;并将原数组中的元素复制到新数组中&#xff0c;然后更新原…

Word文件后缀

Word文件后缀 .docx文件为Microsoft Word文档后缀名&#xff0c;基于XML文件格式 .dotm为Word启用了宏的模板 .dotx为Word模板 .doc为Word97-2003文档&#xff0c;二进制文件格式 参考链接 Word、Excel 和 PowerPoint 的文件格式参考 Learn Microsoft

类和对象【四】运算符重载

文章目录 运算符重载的概念运算符重载&#xff08;函数&#xff09;返回值类型&#xff1a;任意类型函数名&#xff1a;operator已有操作符 运算符重载&#xff08;函数&#xff09;的特点和注意点3个比较特殊的运算符重载赋值运算符&#xff08;&#xff09;重载返回值类型和返…

嵌入式开发四:STM32 基础知识入门

为方便更好的学习STM32单片机&#xff0c;本篇博客主要总结STM32的入门基础知识&#xff0c;重点在于理解寄存器以及存储器映射和寄存器映射&#xff0c;深刻体会STM32是如何组织和管理庞大的寄存器&#xff0c;从而提高开发效率的&#xff0c;为后面的基于标准库的开发做好铺垫…

MySQL 8.4 版本(LTS) 发布,一睹为快

前言 Oracle 前几天发布了 MySQL 8.4 版本(LTS)&#xff0c; 该版本是创新版的第一个长期支持版本。详细规划&#xff0c;请移步 技术译文 | 一文了解 MySQL 全新版本模型 关于 MySQL 的版本发布规划 Oracle MySQL 官方开发团队推出的新版本将过渡到新的 MySQL 版本模型。MyS…

cefsharp实现资源替换如网页背景、移除替换标签、html标识、执行javascript脚本学习笔记(含源码说明)

(一)实现测试(仅供学习参考) 1.1 目标系统页面(登录页)和登录后首页面中2处(一个替换一个移除) 1.2 实现后效果(使用cefsharp自定义浏览器实现以上功能) 1.3 登录后页面替换和移除 系统名称和一个功能菜单li (二)通过分析代码实现脚本编写 2.1 分开处理,设置了…

IDEA 2022.1版本开始,可以直接运行Markdown里的命令行

参照这种格式&#xff1a; shell mvn clean install注意idea支持的版本&#xff1a;是从 2022.1版本开始的。 ps&#xff1a;之前有人写过了&#xff0c;感觉很实用但是蛮多开发者不一定会知道的功能。 参考资料&#xff1a; https://www.cnblogs.com/didispace/p/16144107.h…

pygame鼠标绘制

pygame鼠标绘制 Pygame鼠标绘制效果代码 Pygame Pygame是一个开源的Python库&#xff0c;专为电子游戏开发而设计。它建立在SDL&#xff08;Simple DirectMedia Layer&#xff09;的基础上&#xff0c;允许开发者使用Python这种高级语言来实时开发电子游戏&#xff0c;而无需被…

ES数据存储与查询基本原理

Elasticsearch&#xff08;ES&#xff09;简介 Elasticsearch&#xff08;ES&#xff09;是一个分布式、可扩展、近实时的搜索和分析引擎&#xff0c;它基于Lucene&#xff0c;设计用于云计算中&#xff0c;处理大规模文档检索和数据分析任务&#xff0c;常用于实现内部搜索引…

CMake:静态库链接其他动态库或静态库(九)

1、项目结构 对于下面这样一个项目 把calc模块做成静态或者动态库把sort模块做成静态库然后再sort模块中的*.cpp调用calc模块生成的库即可&#xff08;这样就制作了一个静态库引用动态或者静态库&#xff09;test模块用于测试sort模块中的内容 . ├── calc │ ├── ad…

Codeforces Round 943 (Div. 3) 题解 缺F和G2

A题&#xff1a; Maximize? 题目大意&#xff1a; 给你一个整数 x&#xff0c; 要求你找出任意一个 y &#xff0c;。使得最大。 思路一&#xff1a;暴力 数据范围小&#xff0c;直接暴力。 #include <bits/stdc.h> #define int long long #define endl \n using n…

MySQL —— 库的基本操作

一、数据库的增删查改 &#xff08;1&#xff09;创建 语句&#xff1a;create database db_name;&#xff08;db_name是自定义的数据库名字&#xff09; &#xff08;2&#xff09;删除 语句&#xff1a;drop database dp_name;&#xff08;dp_name是要被删除的数据库的名字…

【智能算法】冠豪猪优化算法(CPO)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献5.代码获取 1.背景 2024年&#xff0c;M Abdel-Basset等人受到冠豪猪防御行为启发&#xff0c;提出了冠豪猪优化算法&#xff08;Crested Porcupine Optimizer, CPO&#xff09;。 2.算法原理 2.1算法思想 …

【Cpp】类和对象#构造函数 析构函数

标题&#xff1a;【Cpp】类和对象#构造函数 析构函数 水墨不写bug &#xff08;图片来源于网络&#xff09; 正文开始&#xff1a; &#xff08;一&#xff09;构造函数 构造函数是特殊的成员函数&#xff0c;需要注意的是&#xff0c;构造函数虽然名称叫构造&#xff0c;但…

区块链 | IPFS:Merkle DAG(进阶版)

&#x1f98a;原文&#xff1a;Merkle DAGs: Structuring Data for the Distributed Web &#x1f98a;写在前面&#xff1a;本文属于搬运博客&#xff0c;自己留存学习。 1 Merkle DAG 当我们在计算机上表示图时&#xff0c;必须通过提供节点和边的具体表示来编码我们的数据…

常用SQL命令

应用经常需要处理用户的数据&#xff0c;并将用户的数据保存到指定位置&#xff0c;数据库是常用的数据存储工具&#xff0c;数据库是结构化信息或数据的有序集合&#xff0c;几乎所有的关系数据库都使用 SQL 编程语言来查询、操作和定义数据&#xff0c;进行数据访问控制&…

yudao-cloud微服务系统系统模块+后台管理系统成功运行

&#x1f339;作者主页&#xff1a;青花锁 &#x1f339;简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java微服务架构公号作者&#x1f604; &#x1f339;简历模板、学习资料、面试题库、技术互助 &#x1f339;文末获取联系方式 &#x1f4dd; 系列文章目录 第一章 芋…

C语言之位操作符:<<、>>、、|、^、~,以及原码反码补码和例题详解

目录 前言 一、原码、反码、补码 二、移位操作符 三、位操作符&#xff1a;&、|、^、~ 四、经典例题分析&#xff1a; 总结 前言 本文将详细介绍C语言中左移操作符<<&#xff0c;右移操作符>>&#xff0c;按位与&&#xff0c;按位或|&#xff0c;按位异或^…

【Spring AI】09. ETL 管道

文章目录 ETL PipelineAPI 概述入门指南ETL 接口和实现DocumentReaderJsonReaderTextReaderPagePdfDocumentReaderParagraphPdfDocumentReaderTikaDocumentReader DocumentTransformerTextSplitterTokenTextSplitterContentFormatTransformerKeywordMetadataEnricherSummaryMet…

【通信中间件】Fdbus HelloWorld实例

Fdbus实例教程 Fdbus简介 Fdbus 全称 Fast Distributed Bus&#xff08;高速分布式总线&#xff09;&#xff0c;提供IPCRPC功能。适用于多种OS&#xff1a; LinuxQNXAnroidOSWindow Fdbus本质是Socket&#xff0c;IPC基于Unix domain socket&#xff0c;RPC基于TCP。使用G…