美文网首页一个程序猿的码农生活
vue中computed和watch的使用及区别

vue中computed和watch的使用及区别

作者: 帝子兮小柒 | 来源:发表于2020-03-31 18:52 被阅读0次

    一.

    1.computed:当页面中某些数据依赖其他数据进行变动的时候,可以使用计算属性。
    需要注意的是,就算在data中没有直接声明出要计算的变量,也可以直接在computed中写入。
    计算属性默认只有getter,可以在需要的时候自己设定setter

    <!DOCTYPE html>
    <html>
    
        <head>
            <meta charset="utf-8" />
            <title></title>
            <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
        </head>
    
        <body>
            <div id="app">
                {{fullName}}
            </div>
            <script type="text/javascript">
                new Vue({
                    el: '#app',
                    data: {
                        firstName: 'Foo',
                        lastName: 'Bar',
                    },
                    computed: {
                        fullName: function() {
                            return this.firstName + ' ' + this.lastName
                        }
    //                  fullName: {
    //                      // getter
    //                      get: function() {
    //                          return this.firstName + ' ' + this.lastName
    //                      },
    //                      // setter
    //                      set: function(newValue) {
    //                          var names = newValue.split(' ')
    //                          this.firstName = names[0]
    //                          this.lastName = names[names.length - 1]
    //                      }
    //                  }
                    }
                })
            </script>
        </body>
    
    </html>
    

    2.watch用于观察和监听页面上的vue实例,当然在大部分情况下我们都会使用computed,但如果要在数据变化的同时进行异步操作或者是比较大的开销,那么watch为最佳选择。

    <!DOCTYPE html>
    <html>
    
        <head>
            <meta charset="utf-8" />
            <title></title>
            <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
        </head>
    
        <body>
            <div id="app">
                {{fullName}}
            </div>
            <script type="text/javascript">
                new Vue({
                    el: '#app',
                    data: {
                        firstName: 'Foo',
                        lastName: 'Bar',
                        fullName: 'Foo Bar'
                    },
                    watch: {
                        firstName: function(val) {
                            this.fullName = val + ' ' + this.lastName
                        },
                        lastName: function(val) {
                            this.fullName = this.firstName + ' ' + val
                        }
                    }
                })
            </script>
        </body>
    
    </html>
    

    二、computed与watch的区别:

    计算属性computed :

    1. 支持缓存,只有依赖数据发生改变,才会重新进行计算

    2. 不支持异步,当computed内有异步操作时无效,无法监听数据的变化

    3.computed 属性值会默认走缓存,计算属性是基于它们的响应式依赖进行缓存的,也就是基于data中声明过的数据通过计算得到的

    1. 如果一个属性是由其他属性计算而来的,这个属性依赖其他属性,是一个多对一或者一对一,一般用computed

    5.如果computed属性属性值是函数,那么默认会走get方法;函数的返回值就是属性的属性值;在computed中的,属性都有一个get和一个set方法,当数据变化时,调用set方法。

    侦听属性watch:

    1. 不支持缓存,数据变,直接会触发相应的操作;

    2.watch支持异步;

    3.监听的函数接收两个参数,第一个参数是最新的值;第二个参数是输入之前的值;

    1. 当一个属性发生变化时,需要执行对应的操作;一对多;

    2. 如果在data中没有相应的属性的话,是不能watch的,这点和computed不一样。

    相关文章

      网友评论

        本文标题:vue中computed和watch的使用及区别

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