Vue3 computed && watch(watchEffect)
1 # Vue3 计算属性与监视
2 # 1.computed函数:与Vue2.x中的computed配置功能一致
3 inport {ref,computed,watch} from 'vue';
4 setup(){
5 let person = {
6 firstName: '张',
7 lastName: '三'
8 };
9 // 计算属性——简写
10 let fullName = computed(()=>{
11 return person.firstName + person.lastName;
12 });
13 // 计算属性完整写法(这里你也可以直接:person.fullName = computed(...))
14 let fullName = computed({
15 get(){return person.firstName+person.lastName},
16 set(value){
17 const nameArr = value.split('-');
18 person.firstName = nameArr[0];
19 person.lastName = nameArr[1];
20 }
21 });
22 }
23 # 2.watch与watchEffect
24 <template>
25 <h2>sum的值:{{sum}}</h2>
26 <button @click="sum+=1">点我+1</button>
27 <hr>
28 <h3>{{msg}}</h3>
29 <button @click="msg+='!'">点我+!</button>
30 <hr>
31 <h3>姓名:{{person.name}}</h3>
32 <h3>年龄{{person.age}}</h3>
33 <h3>薪资:{{person.job.j1.salary}}K</h3>
34 <button @click="person.name+='~'">修改姓名</button>
35 <button @click="person.age++">年龄增长</button>
36 <button @click="person.job.j1.salary++">涨薪</button>
37 </template>
38
39 <script>
40 import {ref, reactive, computed, watch, watchEffect} from 'vue'
41 export default {
42 name: 'HelloWorld',
43 setup(props, context){
44 let sum = ref(0);
45 let msg = ref('你好啊');
46 let person = reactive({
47 name: '张三',
48 age: 18,
49 job:{
50 j1:{
51 salary: 30
52 }
53 }
54 });
55
56 // 情况一:监视ref所定义的一个响应式数据
57 watch(sum, (newValue, oldValue)=>{
58 console.log('sum的值变化了!',newValue, oldValue);
59 },{immediate:true});
60
61 // 情况二:监视ref所定义的多个响应式数据
62 watch([sum,msg], (newValue, oldValue)=>{
63 console.log('sum或msg的值变化了!',newValue, oldValue);
64 },{immediate:true});
65
66 /*
67 情况三:监视reactive所定义的一个响应式数据的全部属性
68 1.注意:吃出无法正确的获取oldValue
69 2.注意:强制开启了深度监视(deep=false配置无效)
70 */
71 watch(person, (newValue, oldValue)=>{
72 console.log('person的值变化了!',newValue, oldValue);
73 },{deep:true}); // 此处deep配置无效
74
75 // 情况四:监视reactive所定义的一个响应式数据中的某个属性
76 watch(()=>person.name, (newValue, oldValue)=>{
77 console.log('person.name的值变化了!',newValue, oldValue);
78 });
79
80 // 情况五:监视reactive所定义的多个响应式数据中的某个属性。newValue和oldValue会以数组形式呈现新旧值
81 watch([()=>person.name, ()=>person.age], (newValue, oldValue)=>{
82 console.log('person.name或person.age的值变化了!',newValue, oldValue);
83 });
84
85 // 特殊情况:监视reactive所定义的对象数据,需要开启deep监视,不然对象属性不会被监视(注意:odlValue也不正常)
86 watch(()=>person.job, (newValue, oldValue)=>{
87 console.log('person.job的值变化了!',newValue, oldValue);
88 }, {deep:true});
89
90 /**
91 * watchEffect函数:
92 * watch的套路是:既要知名监视的属性,也要知名监视的回调。
93 * watchEffect的套路是:不用知名监视哪个属性,监视的回调中用到哪个属性,那就监视哪个属性。
94 * watchEffect有点想computed:
95 * .但computed注重是计算出来的值(回调函数的返回值),所以必须要写返回值
96 * .而watchEffect更注重的是过称(回调函数的函数体),所以不用写返回值
97 */
98 // watchEffect所指定的回调中用到的数据只要发生变化,则直接重新执行回调
99 watchEffect(()=>{
100 const x1 = sum.value;
101 console.log('watchEffect被调用了0');
102 });
103
104 watchEffect(()=>{
105 const x2 = person.job.j1.salary;
106 console.log('watchEffect被调用了1');
107 });
108
109 return {
110 sum,
111 msg,
112 person
113 }
114 }
115 }
116 </script>
Vue3 computed && watch(watchEffect)的更多相关文章
- vue3 watch和watchEffect的详细讲解
watch 监听 reative 创建的值 const state = reactive({ nickname: "xiaofan", age: 20 }); setTimeout ...
- vue源码中computed和watch的解读
computed 会基于其内部的 响应式依赖 进行缓存. 只在相关 响应式依赖发生改变 时 它们才会重新求值. 可以在将模板中使用的常量放在计算属性中. watch 监听数据变化,并在监听回调函数中返 ...
- Vue3 setup详解
setup执行的时机 在beforeCreate之前执行(一次),此时组件对象还没创建: this是undefined,不能通过this来访问data/computed/methods/props: ...
- 想知道Vue3与Vue2的区别?五千字教程助你快速上手Vue3!
从Vue3发布以来,我就一直对其非常感兴趣,就一直想着将其投入公司的生产中,但是开始考虑到很多不确定性就暂时对一些很小的功能进行一些尝试:慢慢的发现组合式Api的形式非常适合开发(个人感觉),尤其是V ...
- 端午总结Vue3中computed和watch的使用
1使用计算属性 computed 实现按钮是否禁用 我们在有些业务场景的时候,需要将按钮禁用. 这个时候,我们需要使用(disabled)属性来实现. disabled的值是true表示禁用.fals ...
- vue 3 学习笔记 (七)——vue3 中 computed 新用法
vue3 中 的 computed 的使用,由于 vue3 兼容 vue2 的选项式API,所以可以直接使用 vue2的写法,这篇文章主要介绍 vue3 中 computed 的新用法,对比 vue2 ...
- vue3中的defineProps,watch,computed
在vue3的setup语法糖中,defineProps不需要引入了 <script setup> import { computed } from '@vue/reactivity'; i ...
- vue3中使用computed
演示示例(vant组件库的轮播图): <van-swipe :loop="false" :width="150" class="my-Swipe ...
- vue3 使用 data、computed、methods
简单数据ref复杂数据reactive 使用方法: // useCount.js import {ref,reactive,computed} from 'vue' export default fu ...
随机推荐
- 面试突击51:为什么单例一定要加 volatile?
单例模式的实现方法有很多种,如饿汉模式.懒汉模式.静态内部类和枚举等,当面试官问到"为什么单例模式一定要加 volatile?"时,那么他指的是为什么懒汉模式中的私有变量要加 vo ...
- React简单教程-6-单元测试
前言 我想大部分人的前端测试,都是运行项目,直接在浏览器上操作,看看功能正不正常.虽然明明有测试库可以使用,但是因为"要快"的原因,让好好做测试变成了一件影响效率的事. 因为这种无 ...
- point pair feature在2D图像匹配中的应用
point pair feature在2D图像匹配中的应用 point pair feature(ppf) @article{BertramDrost2010ModelGM, title={Model ...
- 【Openxml】颜色变化属性计算
Openxml的颜色变化属性 目前Openxml存在颜色变化属性如下: 参数 说明 Hue 色调(色相) HueModulate 色调调制,百分比 HueOffset 色调偏移量,角度值 Satura ...
- 粗谈对ajax的理解
ajax:Asynchronous JavaScript and XML异步JavaScript和XML技术Asynchronous:JavaScript:XMLHttpRequestXML:实现数据 ...
- UiPath图片操作截图的介绍和使用
一.截图(Take Screenshot)的介绍 截取指定的UI元素屏幕截图的一种活动,输出量仅支持图像变量(image) 二.Take Screenshot在UiPath中的使用 1. 打开设计器, ...
- 微服务探索之路04篇k8s增加子节点,metrics资源监控,ingress-nginx域名配置及https配置
1 k8s增加子节点 1.1 子节点服务器安装docker,使用脚本自动安装 curl -fsSL https://get.docker.com | bash -s docker --mirror A ...
- sql-DQL-多表联查
多表查询 笛卡尔积 左表的每条数据和右表的每条数据组合,这种效果称为笛卡尔乘积 select * from emp, dept; 笛卡尔积引入了很多无用的数据,要完成多表查询,需要设置过滤条件来消除无 ...
- web文本划线的极简实现
开篇 文本划线是目前逐渐流行的一个功能,不管你是小说阅读网站,还是卖教程的的网站,一般都会有记笔记或者评论的功能,传统的做法都是在文章底部加一个评论区,优点是简单,统一,缺点是不方便对文章的某一段或一 ...
- python——进行年龄和性别检测
年龄和性别检测 使用Python编程语言带你完成使用机器学习进行年龄和性别检测的任务. 首先需要编写用于检测人脸的代码,因为如果没有人脸检测,我们将无法进一步完成年龄和性别预测的任务. 下一步是预测图 ...