首页 > 其他分享 >Vue中computed和watch的区别

Vue中computed和watch的区别

时间:2022-11-28 16:33:51浏览次数:39  
标签:Vue computed val lastName watch 监听 属性

今天简单说一下computed和watch的区别。
先看代码,两者怎么实现的。

<div id="app">
        <input type="text" v-model="firstName"><br>
        <input type="text" v-model="lastName"><br>
        <h2>{{fullName()}}</h2>
    </div>
<script>
  var app = new Vue({
            el: '#app',
            data: {
                firstName: '张',
                lastName: '三',
                fullName: '张三'
            },
            // watch 监视、监听,在此处定义监听器
            // 作用:监视data中的数据变化
            watch: {
                // 侦听器以函数的形式定义,函数名称就是监视的数据的名称,参数就是数据变化后的新值
                firstName(val) {
                    console.log(val);
                    this.fullName = val + this.lastName;
                },
                lastName(val) {
                    console.log(val);
                    this.fullName = this.firstName + val;
                }
            }
        })
        //计算属性方式实现
        var app = new Vue({
            el: '#app',
            data: {
                firstName: '张',
                lastName: '三',
            },
            computed: {
                // 计算属性在某些场景下(此示例),要比侦听器代码精简。
                fullName() {
                    return this.firstName + this.lastName;
                }
            }
        })
</script>

computed和watch的区别
1、computed是计算属性;watch是监听,监听data中的数据变化。
2、computed支持缓存,当其依赖的属性的值发生变化时,计算属性会重新计算,反之,则使用缓存中的属性值;watch不支持缓存,当对应属性发生变化的时候,响应执行。
3、computed不支持异步,有异步操作时无法监听数据变化;watch支持异步操作。
4、computed第一次加载时就监听;watch默认第一次加载时不监听。

     immediate 组件创建时刻执行与否
     immediate: true,第一次加载时监听(默认为false)

     deep 深度监听 不推荐使用(非常的消耗性能)
     监听的属性是对象的话 不开启deep 对象子属性变化不会触发watch
     开启了deep 对象内部所有子属性变化 都会触发watch

5、computed中的函数必须调用return;watch不是。
6、使用场景:
computed:一个属性受到多个属性影响,如:购物车商品结算。
watch:一个数据影响多条数据,如:搜索数据。
数据变化响应,执行异步操作,或高性能消耗的操作,watch为最佳选择。

标签:Vue,computed,val,lastName,watch,监听,属性
From: https://www.cnblogs.com/baoxinyu/p/16932547.html

相关文章

  • vue2源码学习2vuex&vue-router
    1.vue插件编写插件可以实现对象vue的拓展,比如新增全局属性/方法,添加实例方法,使用mixin混入其他配置项等等。编写插件必须要实现install方法,当调用Vue.use()使用插件时,......
  • 进度条 vue3 vite
    NProgress.js官网 https://ricostacruz.com/nprogress/安装:npminstallnprogress使用://引入NProgress进度条importNProgressfrom'nprogress'import'nprogres......
  • vue大文件上传demo
    ​ 以ASP.NETCoreWebAPI 作后端 API ,用 Vue 构建前端页面,用 Axios 从前端访问后端 API,包括文件的上传和下载。 准备文件上传的API #region 文件上传......
  • vue的.sync修饰符用法及原理详解
    vue.sync的历史vue.sync修饰符最初存在于vue1.0版本里,但是在2.0中被移除了。但是在2.0发布之后的实际应用中,vue官方发现.sync还是有其适用之处,比如在开发可复......
  • Electron-vue 使用Element-UI el-table 不显示
    在Electron-Vue中引入Element-UI,发现el-table显示空白,查资料发现只需要在.electron-vue/webpack.renderer.config里面白名单模块加上 'element-ui'  //修改前......
  • Vue3+Vite项目中 使用WindiCSS.
    之前工作有了解过根据类名来写元素的样式,一听就发出疑问:这样写项目可读性恐怕不是很好吧。。。  之后来到杭州工作后,开始使用WindiCSS后发现真香!!! 由于近期所写的项......
  • vue文件夹上传这么做
    ​ 这里只写后端的代码,基本的思想就是,前端将文件分片,然后每次访问上传接口的时候,向后端传入参数:当前为第几块文件,和分片总数下面直接贴代码吧,一些难懂的我大部分都加上......
  • Vue踩坑日记一
    Vue踩坑日记一:ViewUI添加单击事件不生效问题:使用IviewMenu过程中,出现其子项MenuItem添加@click事件无法生效的问题。解决办法:使用@click.native原生点击事件......
  • 【Vuejs】114-从头开始学习Vuex
    一、前言当我们的应用遇到多个组件共享状态时,会需要多个组件依赖于同一状态抑或是来自不同视图的行为需要变更同一状态。以前的解决办法:a.将数据以及操作数据的行为都定义在......
  • Vue获取到 Promise {<pending>} 数的格式解析方法
    Promise.all([request({url:urlPrefix_custom,method:'get',params:querys})]).then((res)=>{console.log("---......