• vue响应式测试以及注意到在vue中使用定时器(windowAPI)的问题


    测试1.未在data内注册的变量没有响应式,不具备响应式的变量值变化不会触发页面重新渲染

    视图始终是 count:0,a:1;

    <template>
      <div id="welcome">
        <!-- data内注册的变量才会具有响应式 -->
        <div>count:{{count}}</div>
        <div>a:{{a}}</div>
      </div>
    </template>
    
    <script>
    export default {
        data(){
            return {
              count:0
            }
        },
        created(){
        //创建变量a为1,
          this.a=1
        },
        mounted(){
           setTimeout(()=>{
                 this.a=99
                 console.log(this.count); // 0
                 console.log(this.a);     //99
             },1000)
        }
    }
    
    </script>
    

    测试2.在data内注册的变量具有响应式,具备响应式的值变化触发页面重新渲染

    视图由 count:0 ,a:1 变为 count:99,a:99;

    <template>
      <div id="welcome">
        <!-- data内注册的变量才会具有响应式 -->
        <div>count:{{count}}</div>
        <div>a:{{a}}</div>
      </div>
    </template>
    
    <script>
    export default {
        data(){
            return {
              count:0
            }
        },
        created(){
        //创建变量a为1,
          this.a=1
        },
        mounted(){
           setTimeout(()=>{
                 this.a=99
                 this.count=99  
                 console.log(this.count); //99
                 console.log(this.a);     //99
             },1000)
        }
    }
    </script>
    

    控制变量法再次验证

    <template>
      <div id="welcome">
        a:{{a}}
        count:{{count}}
        <button @click="btn1">click1</button>
        <button @click="btn2">click2</button>
      </div>
    </template>
    
    <script>
    export default {
        data(){
            return {
              count:0
            }
        },
        created(){
          this.a=1
        },
        methods:{
            //操作:点击 btn1,
            //结果:a的值变为9,视图未变化未更新
           btn1(){ 
            this.a=9
            console.log(this.a);//9
            }  
             ,
    
        //————————————————————————————————————
            //操作:点击 btn1,后再点击btn2
            //结果:a的值变为9,
            //count的值变为99 ,视图在点击完btn2后变化:a:9,count:99;
           btn2(){ 
            this.count=99
            console.log(this.a); //9
            console.log(this.count); //99
            }   
      }
    }
    </script>
    

    定时器

    这是一个很容易疏忽的问题,在vue中用到this时一定要注意this对象的指向。一般来说,使用window的API时,使用箭头函数会让this指向更保险。

    
    <script>
    export default {
        data(){
            return {
              count:0
            }
        },
        mounted(){
           setTimeout(()=>{
                 console.log(this.count); //99
                 console.log(this);   // VueComponent
             },1000)
    
                setTimeout(function(){
                 console.log(this.count); //undefined
                 console.log(this);  //window
             },1000)
        }
    }
    </script>
    
  • 相关阅读:
    LeetCode 到底怎么刷?GitHub 上多位大厂程序员亲测的高效刷题方式
    第 15 篇:接口的单元测试
    【译】GitHub 为什么挂?官方的可行性报告为你解答
    微服务常用的几种部署方式——蓝绿部署,滚动升级,灰度发布/金丝雀发布
    .net生成PDF文件的几种方式
    读取私有字体信息并进行相关判断
    Windows Locale Codes
    总结C#获取当前路径的7种方法
    Devexpress aspxgridview oncustomcallback 无刷新更新数据
    ArcGIS Pro 版本、版本号、发布年代
  • 原文地址:https://www.cnblogs.com/xjt31/p/13985620.html
Copyright © 2020-2023  润新知