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 ...
随机推荐
- GitHub 毕业年鉴「GitHub 热点速览 v.22.20」
GitHub 毕业需要什么呢?一个 PR!那么提交一个 PR 需要什么?也许你是使用终端命令来提交 git 操作的,那么你可以了解下 Bash-Oneliner,收录了大量好用的 bash 命令,虽然 ...
- Java 线程常用操作
继Java线程生命周期继续学习Java线程其他常用操作 线程的常用操作 设置线程名字:setName() 获取线程名称:getName() 线程唯一Id:getId() // 自定义线程名称 Stri ...
- vue ui 创建vue项目 没反应的解决办法 2021
1.升级vue 脚手架 即可 2.再 vue ui 创建项目 cnpm i -g @vue/cli
- 安装Suberversion[SVN]到CentOS(YUM)
运行环境 系统版本:CentOS Linux release 7.3.1611 (Core) 软件版本:Suberversion-1.7.14 硬件要求:无 安装过程 1.安装YUM-EPEL源 Su ...
- 制造企业信息化时代,SaaS系统下沉,移动端上升
这个时代,我们是不是有很多岗位一定是要在电脑前面完成?如果我们让部分岗位的办公室人员离开电脑,让他们通过移动端来完成工作,这又会产生出一个什么样的变化?是否意味着可以有更多的时间在一线生产制造现场,从 ...
- Redis中的原子操作(2)-redis中使用Lua脚本保证命令原子性
Redis 如何应对并发访问 使用 Lua 脚本 Redis 中如何使用 Lua 脚本 EVAL EVALSHA SCRIPT 命令 SCRIPT LOAD SCRIPT EXISTS SCRIPT ...
- conda cheat sheet可直接百度这个名字
- Linux系统安装ActiveMQ
下载安装包 https://activemq.apache.org/components/classic/download/ 上传至服务器并解压 [root@localhost activemq]# ...
- Linux文本搜索及截取操作
Linux文本搜索及截取操作 cat 查看 grep 搜索 awk 截取 查看dna-server.xml 文件的内容 [root@localhost servers]# cat cwag9002/w ...
- Linux切换中英文输入
使用xshell登录Linux服务器后,输入的命令正确但是提示命令不存在,这是什么鬼. 通过移动光标可以发现两种字体的宽度不一样 解决方法 shift + 空格 进行切换