zoukankan      html  css  js  c++  java
  • watch 和 计算属性

    作者:纵横
    链接:https://www.zhihu.com/question/55846720/answer/331760496
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    设计模式不同

    Computed 是一种声明式的解决方案,我们只需要告诉 vue 某个属性的构成方法,就可以一劳永逸的放手不管了。

    computed: {
      fullName: function () {
        return this.firstName + ' ' + this.lastName
      }
    }

    Watch 是一种命令式的解决方案,我们需要自己处理 vue 某个属性依赖要素的变化,根据变化重置这个属性。

    watch: {
      firstName: function (val) {
        this.fullName = val + ' ' + this.lastName
      },
      lastName: function (val) {
        this.fullName = this.firstName + ' ' + val
      }
    }

    响应行为不同

    Computed 的响应是 deep 的响应,即在计算过程中用到的对象的属性发生变化,是可以被监听到的。

    computed: {
      fullName: function () {
        // this.name 的属性 firstName/lastName 变化时 fullName 会响应。
        return this.name.firstName + ' ' + this.name.lastName
      }
    }

    然而,一旦 Computed 没有在模板中使用,vue 是不会为我们计算 Computed 内容的。

    Watch 的响应默认为非 deep 的响应,即观测的是某个对象的字面量。当然,我们可以为 Watch 设置 deep 响应类型或是监听其属性

    watch: {
      name: function () {
        // this.name 的属性 firstName/lastName 变化时不会触发。
        // TODO
      }
    }

    总之

    两者的使用应当是互补的:

    在获得较为简单的属性,且用于展示时,用 computed 可以简化书写。

    在进行比较复杂的异步操作,或有比较明显的副作用时,用 watch 逻辑更清晰。

    另外,需要注意的是,watch 的计算早于同依赖的 computed。

  • 相关阅读:
    HDU 3081 Marriage Match II
    HDU 4292 Food
    HDU 4322 Candy
    HDU 4183 Pahom on Water
    POJ 1966 Cable TV Network
    HDU 3605 Escape
    HDU 3338 Kakuro Extension
    HDU 3572 Task Schedule
    HDU 3998 Sequence
    Burning Midnight Oil
  • 原文地址:https://www.cnblogs.com/blueball/p/12558671.html
Copyright © 2011-2022 走看看