首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
搜索
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
AAAAP丶
门头沟学院 Web前端
关注
已关注
取消关注
@笑填舔(*^_^*):
vue面试题目|收集依赖,react和vue的区别
27. Vue是如何收集依赖的?在初始化 Vue 的每个组件时,会对组件的 data 进行初始化,就会将由普通对象变成响应式对象,在这个过程中便会进行依赖收集的相关逻辑,如下所示∶function defieneReactive (obj, key, val){ const dep = new Dep(); ... Object.defineProperty(obj, key, { ... get: function reactiveGetter () { if(Dep.target){ dep.depend(); ... } return val } ... })}以上只保留了关键代码,主要就是 const dep = new Dep()实例化一个 Dep 的实例,然后在 get 函数中通过 dep.depend() 进行依赖收集。(1)DepDep是整个依赖收集的核心,其关键代码如下:class Dep { static target; subs; constructor () { ... this.subs = []; } addSub (sub) { this.subs.push(sub) } removeSub (sub) { remove(this.sub, sub) } depend () { if(Dep.target){ Dep.target.addDep(this) } } notify () { const subs = this.subds.slice(); for(let i = 0;i < subs.length; i++){ subs[i].update() } }}Dep 是一个 class ,其中有一个关 键的静态属性 static,它指向了一个全局唯一 Watcher,保证了同一时间全局只有一个 watcher 被计算,另一个属性 subs 则是一个 Watcher 的数组,所以 Dep 实际上就是对 Watcher 的管理,再看看 Watcher 的相关代码∶(2)Watcherclass Watcher { getter; ... constructor (vm, expression){ ... this.getter = expression; this.get(); } get () { pushTarget(this); value = this.getter.call(vm, vm) ... return value } addDep (dep){ ... dep.addSub(this) } ...}function pushTarget (_target) { Dep.target = _target}Watcher 是一个 class,它定义了一些方法,其中和依赖收集相关的主要有 get、addDep 等。(3)过程在实例化 Vue 时,依赖收集的相关过程如下∶初 始 化 状 态 initState , 这 中 间 便 会 通 过 defineReactive 将数据变成响应式对象,其中的 getter 部分便是用来依赖收集的。初始化最终会走 mount 过程,其中会实例化 Watcher ,进入 Watcher 中,便会执行 this.get() 方法,updateComponent = () => { vm._update(vm._render())}new Watcher(vm, updateComponent)get 方法中的 pushTarget 实际上就是把 Dep.target 赋值为当前的 watcher。this.getter.call(vm,vm),这里的 getter 会执行 vm.render() 方法,在这个过程中便会触发数据对象的 getter。那么每个对象值的 getter 都持有一个 dep,在触发 getter 的时候会调用 dep.depend() 方法,也就会执行 Dep.target.addDep(this)。刚才 Dep.target 已经被赋值为 watcher,于是便会执行 addDep 方法,然后走到 dep.addSub() 方法,便将当前的 watcher 订阅到这个数据持有的 dep 的 subs 中,这个目的是为后续数据变化时候能通知到哪些 subs 做准备。所以在 vm.render() 过程中,会触发所有数据的 getter,这样便已经完成了一个依赖收集的过程。28. 对 React 和 Vue 的理解,它们的异同相似之处:●都将注意力集中保持在核心库,而将其他功能如路由和全局状态管理交给相关的库;●都有自己的构建工具,能让你得到一个根据最佳实践设置的项目模板;●都使用了Virtual DOM(虚拟DOM)提高重绘性能;●都有props的概念,允许组件间的数据传递;●都鼓励组件化应用,将应用分拆成一个个功能明确的模块,提高复用性。不同之处 :1)数据流Vue默认支持数据双向绑定,而React一直提倡单向数据流2)虚拟DOMVue2.x开始引入"Virtual DOM",消除了和React在这方面的差异,但是在具体的细节还是有各自的特点。●Vue宣称可以更快地计算出Virtual DOM的差异,这是由于它在渲染过程中,会跟踪每一个组件的依赖关系,不需要重新渲染整个组件树。●对于React而言,每当应用的状态被改变时,全部子组件都会重新渲染。当然,这可以通过 PureComponent/shouldComponentUpdate这个生命周期方法来进行控制,但Vue将此视为默认的优化。3)组件化React与Vue最大的不同是模板的编写。●Vue鼓励写近似常规HTML的模板。写起来很接近标准 HTML元素,只是多了一些属性。●eact推荐你所有的模板通用JavaScript的语法扩展——JSX书写。具体来讲:React中render函数是支持闭包特性的,所以import的组件在render中可以直接调用。但是在Vue中,由于模板中使用的数据都必须挂在 this 上进行一次中转,所以 import 一个组件完了之后,还需要在 components 中再声明下。4)监听数据变化的实现原理不同●Vue 通过 getter/setter 以及一些函数的劫持,能精确知道数据变化,不需要特别的优化就能达到很好的性能●React 默认是通过比较引用的方式进行的,如果不优化(PureComponent/shouldComponentUpdate)可能导致大量不必要的vDOM的重新渲染。这是因为 Vue 使用的是可变数据,而React更强调数据的不可变。5)高阶组件react可以通过高阶组件(HOC)来扩展,而Vue需要通过mixins来扩展。高阶组件就是高阶函数,而React的组件本身就是纯粹的函数,所以高阶函数对React来说易如反掌。相反Vue.js使用HTML模板创建视图组件,这时模板无法有效的编译,因此Vue不能采用HOC来实现。6)构建工具两者都有自己的构建工具:●React ==> Create React APP●Vue ==> vue-cli7)跨平台●React ==> React Native●Vue ==> Weex另外一个属性subs则是watcher的数组,所以dep实际上就是对watcher的管理具体来说react当中的render函数是支持闭包特性的,所以import的组件在render当中可以直接调用,但是在vue当中,由于模板当中使用的数据都必须挂载this上进行依次中专,所以import一个组件完了以后,还需要再compoents当中再次声明一下所以import的组件再render当中可以直接调用的,但是再vue当中,由于模板当中使用数据都必须挂载this上进行一次中专,所以import一个组件完了以后vue通过getter/setter以及一些函数的劫持,能够精确直到数据的变化,不需要特别的优化九年能够达到很好的性能react默认通过比较引用的方式进行的,如果不要头花pureComponent/shouldComponentUpdate可能会导致大量不必要的vDom的重新渲染,这是因为vue使用的是可变的数据,而react更强掉数据的不可变的、vuejs使用html模板创建视图组件,这个时候模板无法有效编译的,因此vue不能采用hoc来实现的。
点赞 1
评论 1
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
03-30 04:41
三江学院 游戏策划
游戏策划准备在春招吃尾气了
个人曾因为在秋招期间忙于个人项目,没时间找实习,现在春招被卡学历了,大伙帮忙看看简历有没有能改动的地方?前情提要;个人在传奇行业从小做到大,从初中到现在大学即将毕业已经有八年时间了,赚也赚了个二三十万,现在不知道从哪下手修改简历/找工作,跟同龄人相比我的经验和专业水平高一点,同时也兼顾独游制作开发,秋招的时候忙着赚钱就没找实习,现在有点不知道怎么下手了,虽然个人在传奇圈也算一员猛将,但是终究是想做更多彩的游戏。说起跟传奇的渊源,最开始还是因为家长喜欢玩,把我也给带起来了,后面我就尝试自己做了,没想到转眼间已经要毕业了,大学期间虽然经济资源没差过,但是除了传奇之外没有其他项目经验,是不是我也变成...
简历中的项目经历要怎么写
点赞
评论
收藏
分享
03-31 18:23
中国矿业大学(北京) Web前端
分享三个不那么常见的字节/快手前端手撕题
1. 判断一个对象是否是 Promise(使用TypeScript)面试写法 function isPromise<T = any>(val: any): val is Promise<T> { return ( val !== null && (typeof val === 'object' || typeof val === 'function') && typeof val.then === 'function' ) } 面试讲解要点核心标准不是 instanceof Promise Promise 的本质:thenable(拥有 ...
前端面试准备&技...
点赞
评论
收藏
分享
03-29 17:05
门头沟学院 Java
我们到底在焦虑什么呢?
昨天晚上妈妈突然告诉我,一个在科大毕业每几年的亲戚去世了,才三十不到。突然间我躺在床上,感觉自己对未来的焦虑、烦恼,似乎在生命之重面前成了一片微不足道的叶。昨天我的女朋友送了我一个噜噜的玩偶,我把它放在床上陪着我睡觉。我突然想到,如果有一天我生了一场大病,躺在床上,无法健身,无法学习,无法和我爱的人一起散步,吃饭,做最平常的事情,这有多么可怕啊?我们现在活着,爱着,在努力地往前走,这就是最伟大的财富了。
Sole_Brill...:
说得太对了,活着本身就是最大的财富,别被焦虑困住
如何排解工作中的焦虑
点赞
评论
收藏
分享
03-17 15:30
西安电子科技大学 嵌入式软件开发
嵌入式找实习简历求拷打
有个疑问,我的简历是不是太杂了,mcurtos Linux应用 驱动 内核 zynq都涉及一点,我以后想走驱动或者内核
点赞
评论
收藏
分享
03-27 17:19
南京信息职业技术学院 产品经理
大专top求职tob销售
🎓学历背景:大专top求职tob销售🔑遇到的问题:本人25届,多段销售经历,toc管理30人团队百人top1销冠经历,tob机加工工具开发大型国企外企2kw项目,在校创业,学生会主席,白酒一斤会来事,想找个tob的大规模公司销售具有成熟体系好难,海投了一个月数千份简历都没效果,有没有高人可以指点的海投了一个月数千份简历都没效果,有没有高人可以指点一下谢谢。
我的简历长这样
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
我放弃互联网大厂了。。
3433
2
...
Vibe Coding开发前的 7 个关键步骤
3169
3
...
字节实习一、二、三、HR面面经
2884
4
...
双非前端字节一面面经(难度 plus ultra 版)
2561
5
...
我招了!当年就是被招行这么招进去的
1730
6
...
京东零售平台产品与研发中心一面
1529
7
...
如何把面试主动权握在手里?Ai岗面试焚诀!
1429
8
...
美团后端暑期实习一面
1354
9
...
美团暑期二面
1345
10
...
在工作中,如何正确使用vibe coding来增效?
1345
创作者周榜
更多
正在热议
更多
#
你觉得大几开始实习最合适?
#
9732次浏览
94人参与
#
实习生的蛐蛐区
#
921522次浏览
4698人参与
#
招商银行数字金融训练营
#
69021次浏览
788人参与
#
你见过哪些招聘隐形歧视?
#
6766次浏览
67人参与
#
毕业季等于分手季吗
#
59298次浏览
680人参与
#
面试被问到不会的问题,你怎么应对?
#
8815次浏览
72人参与
#
开放七大实习专项,百度暑期实习值得冲吗
#
28999次浏览
530人参与
#
面试吐槽bot
#
182223次浏览
865人参与
#
好好告别我的学生时代
#
138170次浏览
1554人参与
#
25届秋招公司红黑榜
#
328778次浏览
1292人参与
#
小厂实习有必要去吗
#
87353次浏览
417人参与
#
租房前辈的忠告
#
380373次浏览
7491人参与
#
你都用vibe coding做过什么?
#
4118次浏览
165人参与
#
做完笔试后你收到面试了吗?
#
9518次浏览
82人参与
#
Vibe Coding 会干掉初级岗位吗?
#
7999次浏览
131人参与
#
实习转正进行时
#
168452次浏览
1064人参与
#
AI Coding实战技巧
#
2933次浏览
77人参与
#
你现在一天AI几次?
#
3046次浏览
60人参与
#
牛友の3月总结
#
13253次浏览
122人参与
#
如果人生可以debug你会改哪一行?
#
3559次浏览
75人参与
#
大厂实习和小厂实习最大的区别是什么?
#
17717次浏览
113人参与
#
百度工作体验
#
319728次浏览
2239人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务