计算属性 computed 和侦听属性 watch 的区别

发布于 2025-01-06 10:38:00 字数 1751 浏览 3 评论 0

区别

  1. 计算属性是依赖的值改变会重新执行函数,计算属性是取返回值作为最新结果,所以里面不能异步的返回结果。不能写异步逻辑。
  2. 侦听属性是侦听的值改变会重新执行函数,将一个值重新赋值作为最新结果,所以赋值的时候可以进行一些异步操作。

演示

当一个值改变了需要 1s 之后显示到页面中,通过 watch 可以轻松的实现

  <div>
    <div>
      {{msg}}
    </div>
    <div>
      {{newValue}}
    </div>
    <button @click="handleClick">点击</button>
  </div>

  <script src="https://cdn.bootcss.com/vue/2.6.10/vue.common.dev.js"></script>

  <script>
    let vm = new Vue({
      el: '#app',
      data: {
        msg: 'hello',
        newValue: ''
      },
      methods: {
        handleClick () {
          this.msg = 'hello1'
        }
      },
      watch: {
        msg (newValue) {
          setTimeout(() => {
            this.newValue = newValue
          }, 1000);
        }
      }
    })
  </script>

使用计算属性无法在里面写一些异步逻辑

  <div>
    <div>
      {{msg}}
    </div>
    <div>
      {{newValue}}
    </div>
    <button @click="handleClick">点击</button>
  </div>

  <script src="https://cdn.bootcss.com/vue/2.6.10/vue.common.dev.js"></script>

  <script>
    let vm = new Vue({
      el: '#app',
      data: {
        msg: 'hello',
        temp: ''
      },
      computed: {
        newValue () {
          if (this.temp) {
            // 不能写异步
            // setTimeout(() => {
            //   return msg
            // }, 1000);
            return this.msg
          } else {
            return this.temp
          }
        }
      },
      methods: {
        handleClick () {
          this.msg = 'hello1'
          this.temp = 'hello1'
        }
      }
    })
  </script>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

云朵有点甜

暂无简介

文章
评论
25 人气
更多

推荐作者

卷耳

文章 0 评论 0

佚名

文章 0 评论 0

℉服软

文章 0 评论 0

qq_2gSKZM

文章 0 评论 0

凉宸

文章 0 评论 0

gyhjy

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文