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 ...
随机推荐
- 软件项目管理 ——1.2.PMBOK与软件项目管理知识体系
软件项目管理 --1.2.PMBOK与软件项目管理知识体系 归档于软件项目管理初级学习路线 第一章 软件项目管理基本概念 <初级学习路线合集 > @ 目录 软件项目管理 --1.2.PMB ...
- vscode修改括号对颜色,自定义括号颜色
新版的vscode 1.67(2022年4月更新的版本),自带括号颜色匹配,十分的方便. 至于怎么开启,已经有人写过,这里就不写了,更新到新版默认开启~ 括号颜色默认只有3种颜色,有时候感觉不够用. ...
- Cubieboard安装系统
2013年买的一个小玩意. 一.硬件 1.1 相关资料 http://www.cubieforums.com http://cubie.cc 1.2 cubieboard1 1.3 无线网卡 水星 M ...
- 使用虚拟机在3台centos7系统安装docker和k8s集群
一.安装docker 环境:准备3台centos7系统,都安装上docker环境,具体安装步骤和流程如下 参考: https://docs.docker.com/install/linux/docke ...
- CSS基础学习(二)
11.CSS背景 ①设置背景颜色(颜色值通常可以用十六进制(如#000000)或者颜色名称(如red)来表示) 属性:background-color 例: body { background-col ...
- 成本节省 50%,10 人团队使用函数计算开发 wolai 在线文档应用
作者: 马锐拉 我们的日常工作场景几乎离不开"云文档".目前,人们对于文档的需求再不仅仅是简单的记录,而扩展到办公协同.信息组织.知识分享等.在国内众多在线文档中,wolai 因为 ...
- Go中rune类型浅析
一.字符串简单遍历操作 在很多语言中,字符串都是不可变类型,golang也是. 1.访问字符串字符 如下代码,可以实现访问字符串的单个字符和单个字节 package main import ( &qu ...
- Codeforces Round #746
挺喜欢这场题目的 A: 水,不写了 B: Hemose Shopping 嘲讽自己一下啦~真的是caii 题意:一个数列,我们通过交换两个点(两点满足距离大于等于\(x\)),问能否排序成功. 思路: ...
- [gym102978C] Count Min Ratio
[gym102978C] Count Min Ratio 给定 \(B\) 个蓝色的球. \(R\) 个红色的球以及一个绿色的球,同颜色的球不可区分.对于一种球的排列方式,记 \(l_B,r_B,l_ ...
- Vue出现Component template should ...
当运行vue出现错误Component template should contain exactly one root element. If you ...的时候,我们只需要将<templa ...