为了账号安全,请及时绑定邮箱和手机立即绑定

【九月打卡】第11天 watch 和 watchEffect 的使用和差异性,生命周期函数的新写法

标签:
Vue.js

课程名称:2022持续升级 Vue3 从入门到实战 掌握完整知识体系

课程章节:6-9 watch 和 watchEffect 的使用和差异性(1),6-10 watch 和 watchEffect 的使用和差异性(2),6-11 生命周期函数的新写法

主讲老师:Dell


课程内容:

今天学习的内容包括:watch 和 watchEffect 的使用和差异性,生命周期函数的新写法

watch 侦听器:
1、具有一定的惰性,只有变化时才执行
2、参数可以拿到当前值和原始值。watch(侦听内容, (当前值,原始值)=> {...})
3、watch 侦听的是 getter/effect 函数、ref、响应式对象、或者这些类型的数组
4、若侦听的是 reactive 类型, 变为函数。如 watch( () => nameObj.name, (cur, per) => {...} )
5、侦听多个数据 。如 watch( [() => obj.name, () => obj.age], ([nameCur, ageCur], [namePre, agePre]) => {...} )

watchEffect 侦听器:
1、立即执行,没有惰性 immediate
2、不需要传递你要侦听的内容,自动会感知代码依赖,不需要传递很多参数,只要传递一个回调函数
3、不能获取之前数据的值

Vue3 没有 beforeCreate、created 这两个生命周期函数,代替的是在这两个生命周期里执行的代码,可以直接写在 setup 里
示例代码:
<script>
// watch 侦听器
// watchEffect 侦听器,偏向于 effect
const app = Vue.createApp({   
    setup() {
        const { reactive, watch, watchEffect, toRefs } = Vue;
        const nameObj = reactive({
            name: 'dell', englishName: 'lee'
        })
        // 具备一定的惰性 lazy
        // 参数可以拿到原始和当前值
        // 可以侦听多个数据的变化,用一个侦听器承载
        watch([() => nameObj.name, () => nameObj.englishName], ([curName, curEng], [prevName, preEng]) => {
            console.log('watch', curName, prevName, '---', curEng, preEng);
        }, { immediate: true })
      
        // 立即执行,没有惰性 immediate
        // 不需要传递你要侦听的内容,自动会感知代码依赖,不需要传递很多参数,只要传递一个毁掉函数
        // 不能获取之前数据的值
        // const stop = watchEffect(() => {
        //   console.log(nameObj.name);
        //   console.log(nameObj.englishName);
        //   setTimeout(() => {
        //     stop();
        //   }, 5000)
        // })
      
        const { name, englishName } = toRefs(nameObj);
      
        return { name, englishName }
    },
        template: `
            <div>
                <div>
                    Name: <input v-model="name"> 
                </div>
                <div>
                    Name is {{ name }}
                </div>
                <div>
                    EnglishName: <input v-model="englishName"> 
                </div>
                <div>
                    EnglishName is {{ englishName }}
                </div>
            </div>
            `,
        });
    
    const vm = app.mount('#root');
</script>

课程收获:

今天算是把第六章学完了,手记里选取了今天学习的前三个小节,明日小目标:先把 Vue 项目开发配套工具讲解学个一半先。不过之前学的内容也要好好复习。

今日课程学习时间大约花费 19 分钟。

https://img1.sycdn.imooc.com/632344490001461e18290906.jpg

https://img4.sycdn.imooc.com/63234449000153e618180881.jpg


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消