导航:首页 > 编程语言 > vuejscomputedset

vuejscomputedset

发布时间:2023-05-20 17:03:12

㈠ watch和computed的区别

计侍衡余算属性通常依赖于其他数据属性。对于依赖属性的任何改变都会触发计算属性的逻辑。计算属性基于它们的依赖关系进行缓存,因此只有当依赖项发生变化时,它们才会重新运行,否则他会使用缓存中的属性值。(例如,返回 new Date()的计算属性将永远不会重新运行,因为逻辑将不会运行超过一次)。计算属性在默认情况下是getters,但是如果需要实现类似的功能,则可以设置setter函数。
计算属性将被混入到 Vue 实例中。所有 getter 和 setter 的 this 上下文自动地绑定为 Vue 实例。

watch:
watch用来监听当一个数据属性值发生变化时,就可以调用的函数,没有必须依赖的数据属性;属于异步操作;
Vue 实例将会在实例化时调用 $watch(),遍历 watch 对象的每一个属性。

举个拦举栗子

但数据量较大的时候,用watch更合适;在过滤数据的时候用computed。

computed的基础用法:
计算属性的getter函数---当其依赖的属性的值发生变化的时,这个计算属性的值也会自动更新。多用于"data,computed"的属性。
计算属性的setter函数---当赋值给计算属性的时候,将调用setter函数。多用于在模板组件中需要修改计算属性自身的值的时候,例子如下:

计算属性的缓存---Vue实例中被观察的数据属性发生了改变时老滚才会重新执行getter,但是我们有时候计算属性依赖实时的非观察数据属性,比如下面例子中的Data.now

计算属性getter不执行的场景---当包含计算属性的节点被移除并且模板中其他地方没有再引用该属性的时候,那么对应的计算属性的getter函数方法不会执行
在v-for中使用计算属性,起到类似"过滤器的作用",例子如下:

watch与computed的set函数的比较---uex 接收 的computed ,用set监测不到变化,必须要用watch才可以生效;(原理:实质没有改变computd的值,只是改变了get的return值 => 组件外的访问)
v-model 改变的computed,用watch监测不到变化,必须要用computed对象中的set函数方法才能监测得到(原理:相当于每次改变了computed自身的值 => 组件内的访问)

computed和watch都不可用箭头函数,因为箭头函数绑定了父级作用域的上下文,所以 this 将不会按照期望指向 Vue 实例,this.a 将是 undefined。

父组件通过props向子组件传入的值,在子组件中是不可修改的,不然会报错,但是如果需要根据页面需求对props传入的值进行修改的话,则可以在data中重新定义一个变量,改变指向,通过watch来监测props值的改变,并实时修改data中变量的值,例子如下:

这里 watch 的一个特点是,最初绑定的时候是不会执行的,要等到 firstName 改变时才执行监听计算。
那我们想要一开始就让他最初绑定的时候就执行改immediate: true。

handler,Vue.js会去处理这个逻辑,最终编译出来其实就是这个handler。

deep的意思就是深入观察,监听器会一层层的往下遍历,给对象的所有属性都加上这个监听器,但是这样性能开销就会非常大了,任何修改里面任何一个属性都会触发这个监听器里的 handler。

举个栗子:

㈡ vue.js中,什么时候用methods什么时候用computed什么时候用watch

1、methods是个方法,比如你点击事件要执行一个方法,这时候就用methods,

2、computed是计算属性,实时响应的,比如你李源铅要根据data里一个值随时变化做出一些处理,就用computed。

3、举一个例子帮助理解:

1)裂哗<div id="root">;

2) </div>;

3) <script> var vm = new Vue({ el: '#root', data:data, methods:{

4)method_now(){ return Date.now();} },

5)computed:{

6)computed_now: function () { return Date.now();}} })

7)</script>

4、控制台访问:

1)$vm0.computed_now;

2)1491741921719$vm0.computed_now;

3)1491741921719$vm0.computed_now;

4)1491741921719$vm0.computed_now;

5)1491741921719$vm0.method_now;

6)()1491741949941$vm0.method_now;

7)()1491741950734$vm0.method_now;

8)()1491741951445$vm0.method_now;

9)()1491741952117。

5、methods是方法和原生js没区别,大多是需要我们主动调用(比如事件)。

6、computed是get 这个get有点特殊,只要触发所依赖数据的set会自动触发get。我们哪好只关心get的return set由系统触发或者依赖的数据触发,官方说依赖缓存只是为了理解。其实Date.now()这种只是系统不能触发set,不能触发set get当然不会通知观察者。

7、watch 是set 由data触发,我们可以在set里进行自己的条件封装。

㈢ vue怎么学

如果你是 Vue 开发新手,可能已经听过很多行话术语,比如单页面姿亩激应用程序、异步组件、服务器端渲染,等等。你可能还听说过与 Vue 有关的一些工具和库,比如 Vuex、Webpack、Vue CLI 和 Nuxt。

浸没在术语和工具的浩瀚海洋中难免会令人感到沮丧,但其实并不是只有你一个人有这种感受,所有经验水平的开发人员都会持续感觉到这种莫名的压力。分享一张图给你看看

基础知识:

㈣ vue是如何避免重复渲染的

上一篇 vue双向绑定原理源码解析

上一篇文章我们说了vue双向绑定原理,每个watcher对象都绑定了唯一的id,当组件props和data对象属性发生变化时,将会携虚触发watcher对象update方法,

lazy属性是避免computed属迟散性里用到(props和data)对象属性变化导致的重复调用update

默认情况下watcher对象的sync是false,会调用queueWatcher方法

这个方法里主要判断了当前工作队列中是否已经有这个watcher对象,辩旦燃

如果工作队列中没有此而且队列也还没开始执行,加到队列中去。

如果工作队列中没有watcher对象,但是队列已经开始执行,如果插入位置小于等于当前正在执行的warcher位置,则插入当前的执行warcher的后面。如果插入位置大于当前正在执行的warcher位置,则比较执行位置index后面watcher的id 和 传入watcher的id

nextTick是异步执行方法,vue对此进行了封装,针对不同浏览器对js原生异步的函数的支持,简单点理解就是一个setTimeout方法

因为是异步执行方法,所以在主线程的方法执行完,才执行任务队列中flushSchelerQueue,

下面我们来看一个列子:

测试下来name属性变化了三次,但是只触发了一次更新。我们来分析一下原因:

name属性第一次改变时,queue中插入  name属性里Dep对象下的所有watcher对象,因主线程函数并没执行完,此时flushSchelerQueue方法还在等待

name属性第二次改变时,queue中并没有插入name属性里Dep对象下的所有watcher对象,此时flushSchelerQueue方法还在等待

name属性第三次改变时,queue中还是没有插入name属性里Dep对象下的所有watcher对象,此时主线程函数执行完毕,回调任务队列中flushSchelerQueue方法,更新视图

阅读全文

与vuejscomputedset相关的资料

热点内容
拷贝过来的pdf文件 浏览:751
抖音小店的访客数据怎么看 浏览:670
怎么把c语言编程的字符向下移动 浏览:786
sql删除文件组代码 浏览:978
安卓post请求多重json 浏览:776
微信消除数据怎么恢复 浏览:918
小米刷机显示系统找不到指定文件 浏览:528
苹果手机小风扇图app叫什么 浏览:292
繁体中文输入工具 浏览:916
pc桌面壁纸文件夹 浏览:473
微信怎么添加群 浏览:781
40岁男人适合的微信名 浏览:925
编程里比例怎么打 浏览:215
苹果12两个app如何分屏 浏览:592
ps下载完不是压缩文件 浏览:362
电脑中的个人文件包括什么 浏览:572
网络连接一般什么密码 浏览:199
java定时器quartz实例 浏览:259
稻壳excel文件太大怎么弄 浏览:901
文件里的视频如何保存到相册 浏览:428

友情链接