Vue 生命周期篇探索 - 第一篇引出生命周期

探索学习 Vue 生命周期篇

Vue 官网: https://cn.vuejs.org/v2/guide/forms.html
尚硅谷Vue2.0+Vue3.0全套教程丨vuejs从入门到精通 https://www.bilibili.com/

第一篇:引出生命周期

1. 需求: 以页面文字透明度减小问题引出mounted

  • 页面编写的文件,每隔一段时间,透明度减小一些(注意不需要用户任何操作)
1.1. 解法1 可以使用全局定时器来实现
  • 直接上代码,利用定时器实现定时修改透明度
     <div id="root">
            <h1>你好,{{name}}</h1>
            <hr/>
            <h2>动态绑定样式 简写写法 Css 属性名 数据变量名 重名 用对象的简写形式  -</h2>
            <h2 :style="{opacity}">欢迎学习Vue</h2>
        </div>
      <script type="text/javascript">
         Vue.config.productionTip = false //设置为 false 以阻止 vue 在启动时生成生产提示
         const vm = new Vue({
            el: "#root",
            data: {
               name: "安锐捷",
               tmd: 1,
               opacity: 1 ,// 透明度 解法1变量
            },
    	});
           setInterval(() => {
             vm.opacity -= 0.01
             if(vm.opacity < 0){ // 透明度<0 重新初始化1
                 vm.opacity = 1
             }
           }, 16);
      </script>
    
  • 细节 引处有一个小细节
        <!--动态绑定样式 原始写法-->
        <h2>动态绑定样式 原始写法</h2>
        <h2 :style="{opacity:tmd}">欢迎学习Vue</h2>
    
        <!--动态绑定样式 简写写法-->
        <h2>动态绑定样式 简写写法 Css 属性名 数据变量名 重名 用对象的简写形式  -</h2>
        <h2 :style="{opacity}">欢迎学习Vue</h2>
        <hr/>
    
1.2. 解法2 探索是否可以通过 调用method加定时器来实现
  • 通过method 加定时器的方法是否可以实现,直接上代码验证
  <div id="root">
        <h1>你好,{{name}}</h1>
        <hr/>
        <h2>解决办法2:定义局部的定时器,是否可以通过 调用method:change 来改变 opacity的值 </h2>
        <h2 :style="{opacity: opacFlag}">欢迎学习Vue {{change()}}</h2>
  </div>
  <script type="text/javascript">
     Vue.config.productionTip = false //设置为 false 以阻止 vue 在启动时生成生产提示
     const vm = new Vue({
        el: "#root",
        data: {
           name: "安锐捷",
           opacFlag: 1, // 解法2 变量
        },
        methods: {
            change(){
                console.log("开启一个定时器");
                 setInterval(() => {
                     this.opacFlag -= 0.01
                     if(this.opacFlag < 0){
                         this.opacFlag = 1
                     }
                 }, 16);
            },
        },
      })

  </script>
  • 打开F12 观察发现 定时器一直被调用,频率特别高:这是什么原因呢?
    在这里插入图片描述
    • 原因分析
    1. vue 渲染页面解析模板,开始执行change() 方法
    2. change() 定时器改变opacFlag 的值后,触发getter/setter 方法渲染页面,**change()**方法又被渲染调用,**change()**方法被 调用的同时,又一个定时器开开启,周而复始
    3. change() 周而复始的同时,每隔16ms 还会去改变opacFlag 的值后,也会触发getter/setter,同样又会重新解析页面,触发**change()**方法
    4. 导致的结果就是指数大爆炸
    5. 最终结果就是:1、作为事件主动去掉不满足条件,2、作为插值表达式调用会导致指数大爆炸
      执行流程图如下
      在这里插入图片描述
  • 所以说解法2 ,这种使用 methods 方法调用的方式是有问题的,不可以如此操作
1.3. 解法3 引出Vue 挂载函数 mounted
  • Vue 中有一个moutendmounted 执行时机:Vue 完成模板的解析,并把初始的真实DOM元素放入页面后(挂载完毕)调用
  • 当前的需求mounted 正好满足
  • 直接上代码,观察效果
   <div id="root">
         <h1>你好,{{name}}</h1>
         <hr/>
         
         <h2>解决办法3Vue 挂载函数 mounted </h2>
         <h2 :style="{opacity: opacMouFlag}">欢迎学习Vue </h2>
     </div>
    <script type="text/javascript">
        Vue.config.productionTip = false //设置为 false 以阻止 vue 在启动时生成生产提示
        const vm = new Vue({
            el: "#root",
            data: {
            name: "安锐捷",
            opacMouFlag: 1 // 解法3 变量
            },
            // Vue 完成模板的解析,并把初始的真实DOM元素放入页面后(挂载完毕)调用mounted
            mounted() {
                console.log("mounted:",this);
                setInterval(() => {
                    this.opacMouFlag -= 0.01
                    if(this.opacMouFlag < 0){
                        this.opacMouFlag = 1
                    }
                }, 16);
            },
        })
    </script>
  • 页面观察 ,很完美的实现透明度的切换。

总结一波

  • Vue 生命周期
    1. 又名:生命周期回调函数、生命周期函数、生命周期钩子;
    2. 是什么:Vue 在关键时刻里帮我们调用的一些特殊名称的函数。
    3. 生命周期函数的名子不可更改,但函数的具体内容是程序员根据需求编写的。
    4. 生命周期函数中的this 指向是vm 或 组件实例对象;
  • 《赠萧瑀》李世民
  • 疾风知劲草,板荡识诚臣。
  • 勇夫安识义,智者必怀仁。

创作不易,欢迎 多多点赞,收藏 各节里面总结的还有不到位的欢迎指证
邮箱:pymxb1991@163.com
微信:py_mxb
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值