当前位置:首页 > 软件开放 > 正文内容

vue源码解析视频(vuex源码解析)

软件开放2年前 (2023-02-06)1081

今天给各位分享vue源码解析视频的知识,其中也会对vuex源码解析进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

Vue源码系列之生命钩子beforeCreate&created

在实习面试中,Vue相关被问到最多的就是围绕生命周期函数内部所作的一些操作,很多朋友可能了解的就是官网的下图,有时候倒霉遇上硬核点的面试官,深入问些东西就会被怼的哑口无言,本文就是在之前源码的基础上,分析一下,生命周期函数究竟发生了什么

先上图

在分析每个钩子之间究竟干了什么之前,先来看看钩子是怎么触发的,以第一个钩子为例

调用callHook函数并向其传入this和'beforeCreate'字符串,那来看看callHook函数究竟是何方神圣

注意到,该函数一开始,也就是钩子函数进入准备触发前,进行了一个pushTarget()的操作,注释写的是“在钩子函数触发时,禁用依赖收集”,那这个操作是干嘛呢

言归正传,禁用了依赖收集后,创建handlers数组存入合并后options的hook,本例中就是找自定义或者继承来的beforeCreate钩子,然后在invokeWithErroeHandling函数中以此触发,顺序是先触发父级,后自己定义的

而这个invokeWithErroeHandling函数如下

该函数直接就在内部call了钩子,所以钩子内部的this指向vm实例

以上就是钩子函数的触发过程,下面来看不同的生命周期之间究竟干了什么

beforeCreate之前

beforeCreate之后到created

1.对于props:合法化,缓存key进数组方便下次迭代,defineReactive

2.对于data:检验props,methods中是否有重名属性,defineReactive

3.对于methods:代理到vm实例上,方便使用this.method.name调用

4.对于computed:封装成watcher并用该watcher的value缓存该计算属性的value,再在每个计算属性上劫持一层getter和setter,在第一次调用getter的时候,取得最新的value,并将依赖缓存下来,之后再依赖不变的前提下,getter只返回watcher的value而不是又去取一遍值,再依赖发生变化的时候,通知watcher更新,watcher取的最新值作为value,从而实现依赖更新计算属性才更新

5.对于watch:调用$watch封装成一个user watcher,如果有immediate options传入,就在封装的时候就调用一遍callback,有deep options传进来的话就将该属性的所有嵌套属性记为依赖

beforeCreate之前主要是做准备工作,将该实例的options合并整理出来,再把$那些初始话

created之前就是对options做操作,data,props设置数据劫持,methods代理在vm实例上,computed,watch封装成不同类型的watcher

asyncComputed源码解析

在github上面搜索得到大牛已经实现了 asyncComputed , 别人捷足先登了。楼主决定先看一遍它的源码,之后会对他的源码进行拓展。

1.1.1定义插件 :Vue.js的插件使用的 install() 。这个方法的第一个参数是Vue构造器,第二个参数是一个可选的对象:

1.1.2使用插件 : Vue通过全局 Vue.use(obj||fn) 来安装vue的插件

**1.1.3Vue.use结合install直接使用: **

使用 : app.vue

**配置: ** 我们可以通过Vue.mixin 来混合配置

2.2-1 asyncComputed.js

2.2-2 asyncComputed.js 中的 Vue.mixin({})中的beforeCreate()

这里 beforeCreate() 钩子函数 初始化数据null,并没有得到数据。

optionData : 得到每一个对应实例中的data(函数或者对象)

this.$options.computed[prefix + key] 给实例的 computed 添加函数 ;

this.$options.data 给Vue实例化组件添加data方法(一个函数,在 created() 的时候执行)

2.2-3 asyncComputed.js 中的 Vue.mixin({})中的Created()

vue-quill-editor 巧妙解决视频样式问题

这里记录用 vue-quill-editor 出现的几个问题:

使用 quill-image-extend-module 扩展组件(上一篇介绍了)

可以针对返回字符串的class进行调整

quill的视频在保存的时候会转成 iframe,视频展示出来的效果不太可控,而且ie浏览器的支持不友好,

所以需要改成 video 原生标签;做这件事的方法有两种,第一种是去替换源码,找到源码写iframe的位置进行重写,网上资料有人这么干了,但是我看了一下源码,不太建议;

第二种:用 replace 去替换返回的要显示的html内容

以上是预览富文本的内容,content 是从后端返回的html内容,只要在前端将iframe标签用 video标签替换一下即可;

Vue源码系列之生命钩子beforeUpdate&updated

在前面四个生命钩子执行完之后,实例正式走上工作岗位,等待数据的变更来进行相应的视图更新,而更新的过程中就会触发update相关钩子

其实beforeUpdate钩子之前我们已经见过面了,就在mount那一篇

new watcher那里,在watcher构造函数传入callback updateComponent之外,在options那里传入了一个before函数,当依赖数据更新时,就会通知这个watcher更新从而更新页面,但watcher不会马上更新,因为在同一个事件循环里如果出现“把a改成b又将b改成c的操作”,那如果是马上更新就会update两次,而如果放在事件队列里等主线程通知完所有watcher update之后再更新就会把重复无意义的更新剔除掉

所以updateComponent函数不会马上执行,而是被添加到一个更新队列,同样的,在本轮事件循环中的所有更新watcher都会被添加到这个队列

最后调用的nextTick函数会保证将flushScheduleQueue这个函数延时到任务队列时执行,而这个函数就是将队列中所有watcher更新,也就是执行run方法

可以看到,在每个watcher执行run之前会查看有没有before函数,也就是上面说到的那个函数,等更新到render watcher也就是mount那时创建的那个watcher,beforeUpdate钩子触发

等到所有watcher更新完后,就会调用callUpdatedHooks这个函数,在里面找到render watcher,触发updated钩子

但注意到官网有一句话

有朋友就会问了,不是所有的watcher都更新完了吗?那怎么不敢保证,大胆点,改成能保证

慢着慢着,这样做bug出现的更大胆,人家那样说是有理由的

正常的父组件包含同步子组件

生命周期都是

父beforeCreate-父created-父beforeMount-子beforeCreate-子created-子beforeMount-子mounted-父mounted

更新生命周期

父beforeUpdate-子beforeUpdate-子updated-父updated

但还有异步组件啊

此时,父组件遇到异步子组件,如果子组件没有加载完,就会先跳过,继续执行自己的生命钩子,等到加载完后,再强制父组件进行update,所以子组件被重绘一定再updated钩子之前,但反之则不一定

关于vue源码解析视频和vuex源码解析的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

扫描二维码推送至手机访问。

版权声明:本文由飞速云SEO网络优化推广发布,如需转载请注明出处。

本文链接:http://hon-tex.cn/post/7253.html

分享给朋友:

“vue源码解析视频(vuex源码解析)” 的相关文章

河南app软件开发(河南app软件开发大概要多少钱)

河南app软件开发(河南app软件开发大概要多少钱)

本篇文章给大家谈谈河南app软件开发,以及河南app软件开发大概要多少钱对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。 本文目录一览: 1、河南郑州有哪些比较专业的APP开发公司?急需,求推荐。 2、郑州APP开发公司哪家好? 3、本地开发app的公司地址 4、APP开发的知名公...

广州手机软件开发(广州手机软件开发培训)

广州手机软件开发(广州手机软件开发培训)

本篇文章给大家谈谈广州手机软件开发,以及广州手机软件开发培训对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。 本文目录一览: 1、广州手机app软件开发公司排名哪家好?希望推荐有经验的~~谢谢了 2、广州手机软件开发公司怎样选择? 3、广州有哪些专业做APP开发的公司? 4、广州开...

app制作软件手机版(app制作软件手机版下载)

app制作软件手机版(app制作软件手机版下载)

本篇文章给大家谈谈app制作软件手机版,以及app制作软件手机版下载对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。 本文目录一览: 1、自己制作手机app需要用到的软件 2、如何自己制作手机APP软件 3、手机小视频制作,有没有免费的手机app,我说的是模版免费的那种! 4、特效...

三种人学不会编程(编程不是人人都能学)

三种人学不会编程(编程不是人人都能学)

今天给各位分享三种人学不会编程的知识,其中也会对编程不是人人都能学进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录一览: 1、为什么我就是学不会编程 2、三种人学不会cnc 3、学不会编程是智商不高吗 4、为什么我死活学不会编程? 为什么我就是学不会编程...

java怎么看输出结果快捷键(Java快捷输出)

java怎么看输出结果快捷键(Java快捷输出)

今天给各位分享java怎么看输出结果快捷键的知识,其中也会对Java快捷输出进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录一览: 1、JAVA中设置快捷键 2、Java中所有调试的快捷键有哪些啊? 3、怎么使用java代码实现快捷键 JAVA中设置快捷键 p...

发行数字藏品需要什么手续(数字藏品能升值吗)

发行数字藏品需要什么手续(数字藏品能升值吗)

本篇文章给大家谈谈发行数字藏品需要什么手续,以及数字藏品能升值吗对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。 本文目录一览: 1、数字藏品怎么制作 2、朋友支招怎么做数字藏品? 3、数字藏品银行申请流程 4、用稀台元宇宙saas经营数字藏品需要具备什么资质? 5、国家支持数...