计算属性和watch和生命周期函数 DforDream

计算属性和watch和生命周期函数

计算属性

  • 计算属性 computed 调用多次 只执行一次
  • 每次计算后,计算属性都会再内存中缓存,多次访问直接使用缓存
  • 计算属性的依赖改变都会重新计算并缓存
  • 方法 调用多少次,就执行多次

watch监听

  • watch 监听属性的变化

  • 实例创建开始监听,实例销毁移除监听

  • // 监听的完整写法
                    obj: {
                        // handler 固定写法
                         handler(){
                         console.log("obj变化了。。")
                         },
                        // 设置监听对象中的每个属性
                        deep: true,
                        // 配置监听后立即执行
                        immediate: true
                    }
    
  • mounted(){
                    // 监听 不仅可以监听普通的属性进行监听,也可以监听表达式(一定要有返回值,且对data有依赖)
                    // 这种监听方式可以随时监听 随时移除
                    // $watch的返回值是移除监听的函数
                    this.unwatch = this.$watch(() => {
                        return this.a * this.b
                    },(newVal,oldVal) => {
                        console.log("a*b变化了")
                        console.log("newVal",newVal)
                        console.log("oldVal",oldVal)
                    })
      
      
                    // this.$watch("要监听的属性",监听属性变化后执行的回调函数)
                }
    

生命周期函数(钩子函数)

  • vue实例的生命周期: 指的是从创建到销毁的整个过程,再这个过程中vue提供了一些方法,给开发人员执行操作
  • 生命周期过程
// 1. new Vue()
        // 2. 加载生命周期函数
        // 3. beforeCreate() 这个钩子函数 不能操作vue实例和操作dom
        // 4. 加载配置项 进行数据监听
        // 5. 调用created() 这个钩子函数,可以操作属性和实例的其他配置项,不能操作dom
        // 6. 判断是否有el配置项,有则执行下一步,没有则等待$mount(el)调用,才会执行下一步,否则不执行
        // 7. 判断是否有template
        // 8.1 有template 直接编译template
        // 8.2 没有template 取出el的outerHTML(包含#app本身)当成template进行编译
        // 9. beforeMount()
        // 10. 使用编译好的template替换el的outerHTML
        // 11. 调用mounted() 这个钩子函数后,可以操作dom(操作dom不要使用document)使用ref操作(标签内ref赋值,vue内this.$refs获取所有的ref赋值的节点)
        // 12. 当数据发生变化后dom使用了该数据,则会执行beforeUpdate() beforeUpdate指的是dom更新之前
        // 13. 重新渲染dom
        // 14. 执行updated()

        // 15. 如果调用this.$destroy()
        // 16. 执行beforeDestroy() 需要在这个钩子函数中检查实例是否有对外部的引用,会形成闭包,导致之后可能存在内存泄漏
        // 17. 实例自身也会移除数据监听,事件监听及挂载到自身的子组件
        // 18. 执行destroyed()