美文网首页
vue2.x computed vs methods

vue2.x computed vs methods

作者: Nelson_sylar | 来源:发表于2021-05-19 09:57 被阅读0次

    如何理解vue2.x官网计算属性是基于它们的响应式依赖进行缓存的

    以以下代码为示例,会发现除了计算属性不变,methods会随startTime的变更时重绘画面会重新执行,由于计算属性是响应式依赖进行缓存的,而comData没有依赖变动的属性,所以就算出现重绘,comData的值也不会变.

    image.png
    <template>
      <div id="app">
        <div>{{ startTime }}</div>
        <div>
          {{ comData }}
        </div>
        <div>
          {{ getData("method") }}
        </div>
      </div>
    </template>
    
    <script>
    export default {
      name: "App",
      data() {
        return {
          startTime: 0,
        };
      },
      computed: {
        comData() {
          return new Date().getSeconds() + "from computed";
        },
      },
      mounted() {
        setInterval(() => {
          this.startTime++;
        }, 1000);
      },
      updated() {
        window.console.log("更新了");
      },
    
      methods: {
        getData() {
          return new Date().getSeconds() + "from methods";
        },
      },
    };
    </script>
    
    <style>
    #app {
      font-family: "Avenir", Helvetica, Arial, sans-serif;
      -webkit-font-smoothing: antialiased;
      -moz-osx-font-smoothing: grayscale;
      text-align: center;
      color: #2c3e50;
      margin-top: 60px;
    }
    </style>
    
    
    • 接上,在上述环境中如何让comData也会随着startTime变化而变化,再次品味一下计算属性是响应式依赖进行缓存的,于是只需在comData里加入this.startTime即可(甚至都不需要做赋值|运算等操作,只要引入后计算属性就会把它作为响应式依赖,当this.startTime发生变化时就会返回新的值)
        comData() {
          // eslint-disable-next-line no-unused-expressions
          this.startTime;
          return new Date().getSeconds() + "from computed";
        },
    

    把最初代码块中的comData改为上述代码后,会发现上述都随startTime的变化而变化了,区别是:

    1. 方法getData是由于template中有startTime,而startTime发生了变化引起重绘导致又重新执行了getData方法;此时若注释掉template中的 <div>{{ startTime }}</div>会发现依然会变化,这是因为一旦在comData引入了依赖,而依赖发生变化都会引起重绘,而只要重绘都会引起重新执行getData方法
    2. 计算属性变化是因为依赖的startTime发生了变化所以会取新值

    相关文章

      网友评论

          本文标题:vue2.x computed vs methods

          本文链接:https://www.haomeiwen.com/subject/pzgujltx.html