vue中的渲染是什么意思,vue 渲染
这篇文章主要介绍了某视频剪辑软件组件是如何解析及渲染的?帮助大家更好的理解和使用vue,感兴趣的朋友可以了解下
前言
本文将对某视频剪辑软件组件如何解析以及渲染做一个讲解。
我们可以通过Vue。组件注册全局组件,之后可以在模板中进行使用
div id=应用程序
我的纽扣
/div
脚本
Vue.component(我的按钮,{
模板:按钮按钮组件/button ,
});
让vm=新Vue({
埃尔: #app
});
/脚本
全局组件解析原理
为了保证组件的隔离,每个组件通过扩展方法产生一个新的类,去继承父类。并把用户通过Vue。组件方法传入的选择合并到vue。选项。组件,再某视频剪辑软件初始化时合并Vue。选项。组件和虚拟机.$options.components。
1.Vue.component 方法
Vue.options. _ base=Vue//可以通过\_base找到某视频剪辑软件
vue。选项。components={ };
Vue.component=函数(id,定义){
//每个组件产生一个新的类去继承父亲
定义=这个。选项。_ base。扩展(定义);
console.log(1 .给组件创造一个构造函数,基于vue ,定义);
这个。选项。组件[id]=定义;
};
2.Vue.extend 方法
扩展方法就是产生一个继承于某视频剪辑软件的类,并且他身上应该有父类的所有功能。
从导入{mergeOptions}./util/index
Vue.extend=函数(定义){
const Vue=this
const Sub=function VueComponent(选项){
这个. init(选项);
};
sub。原型=对象。创建(vue。原型);
Sub。原型。constructor=Sub
子选项=合并选项(vue。选项,定义);
返回接头;
};
3.属性合并
合并Vue。选项和组件(定义)传入的定义
斯特拉斯。组件=功能(父val,子Val) {
让选项=对象。创建(父值);
if (childVal) {
for (let key in childVal) {
options[key]=子val[key];
}
}
退货选项;
};
4.初始化合并
合并Vue。选项。组件和虚拟机.$options.components
vue。原型。_ init=函数(选项){
const vm=this
虚拟机.$ options=合并选项(VM。构造函数。期权、期权);
//.
initState(VM);
如果(虚拟机.$options.el) {
//将数据挂载到这个模版上
虚拟机.$mount(虚拟机.$ options。El);
}
};
好哒,到这里我们就实现了全局组件的解析。
下面我们再来康康组件如何渲染的吧?
组件的渲染原理
在创建虚拟节点时我们要通过isReservedTag判断当前这个标签是否是组件,普通标签的虚拟节点和组件的虚拟节点有所不同,如果标签是组件应该渲染一个组件的vnode。
导出函数isReservedTag(str) {
let reservedTag=a,div,span,p,img,button,ul,Li ;
返回保留标签。包括(str);
}
1.创建组件虚拟节点
创建组件创建组件的虚拟节点,通过数据上有无钩来区分是否为组件
导出函数createElement(vm,tag,data={},儿童){
//如果标签是组件应该渲染一个组件的虚拟节点
if (isReservedTag(tag)) {
返回vnode(vm,tag,data,data.key,children,undefined);
}否则{
常数=vm .$options.components[tag]
返回createComponent(vm,tag,data,data.key,children,Ctor);
}
}
//创建组件的虚拟节点,为了区分组件和元素数据钩子
函数createComponent(vm,tag,data,key,children,Ctor) {
//组件的构造函数
if(isObject(Ctor)){
Ctor=vm .$选项._ base。扩展(Ctor);//Vue.extend
}
data.hook={ //等会渲染组件时需要调用此初始化方法
初始化(虚拟节点){
设VM=vnode。component instance=new Ctor({ _ is component:true });//新的潜水艇会用此选项和组件的配置进行合并
虚拟机.$ mount();//组件挂载完成后会在vnode.componentInstance.$el
}
}
返回vnode(vm,` vue-component-${tag} `,数据,键,未定义,未定义,{Ctor,children})
}
2.创建组件的真实节点
类型of标记===string ,有可能是组件的虚拟节点,则调用创建组件。
导出函数补丁(oldVnode,vnode){
//1.判断是更新还是要渲染
如果(!oldVnode){
返回创建elm(vnode);
}否则{
//.
}
}
函数createElm(vnode) {
设{ tag,data,children,text,vm }=vnode
如果(类型标记===string) {
if (createComponent(vnode)) {
//返回组件对应的真实节点
返回vnode。组件实例。$ El
}
vnode。El=文档。createelement(标签);//虚拟节点会有一个埃尔属性,对应真实节点
children.forEach((child)={
vnode。埃尔。appendchild(创建elm(子));
});
}否则{
vnode。El=文档。创建文本节点(文本);
}
返回vnode.el
}
创建组件通过数据上是否有钩子。初始化方法,判断是否组件虚拟节点
是的话则调用组件上数据。钩子。初始化
创建组件实例,并赋值给组件实例
组件实例有值说明对应组件的真实数字正射影像图已经生成
函数创建组件(虚拟节点){
设i=vnode.data
if((i=i.hook) (i=i.init)){
I(vnode);
}
if(vnode.componentInstance){
返回真实的
}
}
调用初始化方法,创造组件的实例并该进行挂载
data.hook={
初始化(虚拟节点){
让child=vnode。组件实例=new Ctor({ });
孩子. mount();//组件的挂载
}
}
小结
对组件进行新的组件().$mount()=vm .$el
将组件的$el插入到父容器中(父组件)
就完成啦~
以上就是某视频剪辑软件组件是如何解析及渲染的?的详细内容,更多关于某视频剪辑软件组件解析和渲染的资料请关注我们其它相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。