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 ...
随机推荐
- 管理订单状态,该上状态机吗?轻量级状态机COLA StateMachine保姆级入门教程
前言 在平常的后端项目开发中,状态机模式的使用其实没有大家想象中那么常见,笔者之前由于不在电商领域工作,很少在业务代码中用状态机来管理各种状态,一般都是手动get/set状态值.去年笔者进入了电商领域 ...
- Java - 四种引用类型及应用场景
1. 强引用 new 一个对象的时候,就是强引用 Object object = new Object(); 只要强引用存在,垃圾回收就不会回收该对象,内存不足时会抛出OOM. 2. 软引用 定义:非 ...
- 2021蓝桥杯省赛C++A组试题E 回路计数 状态压缩DP详细版
2021蓝桥杯省赛C++A组试题E 回路计数 状态压缩DP 题目描述 蓝桥学院由21栋教学楼组成,教学楼编号1到21.对于两栋教学楼a和b,当a和b互质时,a和b之间有一条走廊直接相连,两个方向皆可通 ...
- Linux安装netstat命令
Linux安装netstat命令 1.查找netstat命令所属的依赖包 [root@localhost ~]# yum provides netstat netstat命令的安装包为net-tool ...
- 技术分享 | App常见bug解析
原文链接 功能Bug 内容显示错误 前端页面展示的内容有误. 这种错误的产生有两种可能 1.前端代码写的文案错误 2.接口返回值错误 功能错误 功能错误是在测试过程中最常见的类型之一,也就是产品的功能 ...
- React中render Props模式
React组件复用 React组件复用的方式有两种: 1.render Props模式 2.高阶组件HOC 上面说的这两种方式并不是新的APi. 而是利用Raect自身的编码特点,演化而来的固定编码写 ...
- 2.NoSQL之Redis配置与优化
一.关系型数据库与非关系数据库 关系型数据库: 关系型数据库是一个结构化的数据库,创建在关系模型(二维表格模型)基础上,一般面向于记录. sQL语句(标准数据查询语言)就是一种基于关系型数据库的语言, ...
- SAP Display picture
program sap_picture_demo. set screen 200. TYPE-POOLS cndp. ***************************************** ...
- RPA跨系统自动生成采购订单
1.从开发器启动机器人 2.RPA登录友采云 3.RPA根据筛选条件,导出采购订单 4.RPA请并登录NC 5.RPA把读取到的数据,逐个录入到NC系统中,并存储到Excel中 6.RPA将最终的Ex ...
- 小样本利器2.文本对抗+半监督 FGSM & VAT & FGM代码实现
小样本利器2.文本对抗+半监督 FGSM & VAT & FGM代码实现 上一章我们聊了聊通过一致性正则的半监督方案,使用大量的未标注样本来提升小样本模型的泛化能力.这一章我们结合FG ...