当前位置: 首页 > news >正文

唐山注册公司网上申请入口长沙seo排名外包

唐山注册公司网上申请入口,长沙seo排名外包,网站开发技术,腾讯企业邮箱网页登录入口JSX底层渲染机制 一,.步骤 1.把我们写的jsx语法编译为虚拟DOM【virtualDOM】 虚拟DOM对象:框架自己内部构建的一套对象体系(对象的相关成员都是React内部绑定的),基于这些属性描述出我们所构建视图中的DOM接的相关特征 1基于ba…

JSX底层渲染机制

一,.步骤

1.把我们写的jsx语法编译为虚拟DOM【virtualDOM】
虚拟DOM对象:框架自己内部构建的一套对象体系(对象的相关成员都是React内部绑定的),基于这些属性描述出我们所构建视图中的DOM接的相关特征

@1基于babel-preset-react-app 把jsx编译为React.createElement(…)的格式。

只要是元素节点,必然会基于createElement进行处理!
React.createElement(ele,props,…children)
+ele: 元素标签名【或组件】
+props: 元素的属性集合(对象),如果没有任何的属性,则此值为null
+children: 第三个及其以后得参数,都是当前元素的子节点

如下图jsx

root.render{<><h2 className='title' style={styleObj}>XXXX</h2><div className='box'><span>x</span><span>y</span></div></>
}

编译为
在这里插入图片描述
@再把CreateElement的方法执行,创建出VirtualDom对象【也有称为:JSX元素、JSX对象、ReactChild对象…】

//虚拟DOM对象
virtualDOM={$$typeOf:Symbol(react.element),ref:null,key:null,type:标签名【或组件】,//存储了元素相关属性&子节点信息props:{元素的相关节点children:子节点信息【没有子节点就没有则个属性、属性可能是一个值,也可能是一个数组】}
}
/*createElement:创建虚拟DOM对象*/
export fucnction createElement(ele,props,...children){let virtualDOM={$$typeOf:Symbol('react.element'),key:null,key:null,ref:null,type:null. props:{}};let len=children,lengthvirtualDOM.type=ele;if(props){virtualDOM.props={...props}}if(len===1){virtualDOM.props.children=children[0]}else if(len>1){virtualDOM.props.children=children}return virtualDOM
}

2.构建的virtualDOM渲染为真实的DOM元素
真实DOM:浏览器页面中,最后渲染出来,让用户看见的DOM元素
基于ReactDOM中的render方法处理
v16

ReactDOM.render(<>...</>domcument.getElementById('root')
)

v18

const root = React.createRoot(dociment.getElementById('root'))
root,render(<>...</>
)

补充:第一次渲染页面是直接从虚拟DOM —> 真实ODM,但是后续视图更新的时候会经过一个DOM-DIFF的对比,计算出补丁包PATCH(两次视图差异部分),把PATCH补丁包进行渲染

/*render:把虚拟DOM变为真实DOM*/
export function render(virtualDOM,container){let {type,props}=virtualDOM;if(typeof type==='string'){//存储的是标签名:动态创建这样一个标签let ele=domcument.createElement(type);//为标签设置相关属性&节点each(props,(value,key)=>{//classNmae的处理if(key==='className'){ele.className=valuereturn}//style的处理:value存储的是样式对象if(key==='style'){each(value,(val,attr)=>{ele.style[attr]=val})return}//子节点的处理:value存储的children属性值if(key==='children'){let children = valueif(children.length===1){children=[children]}children.forEach(child=>{//子节点是文本节点:直接插入if(typeof child==='string'){ele.appendChild(domcument.createTextNode(child))return;	}//子节点又是一个虚拟ODM:递归处理render(child,ele)})return}ele.setAttribute(key,value);})container.appendChild(ele)}
}
http://www.dinnco.com/news/18226.html

相关文章:

  • 怎么搭建自己的电影网站百度官方版下载
  • 教学单位 网站建设快速网站搭建
  • 网络游戏下载做网络优化的公司排名
  • 国外网站开发百度热搜榜历史
  • ui做网站实例百度入口网站
  • 优化一个网站可以做多少关键词百度商家平台
  • 网站如何做微信推广公司推广方法有哪些
  • 深圳做网站的网络公司旺道营销软件
  • 手机网站页面珠海网站建设
  • 手机永久免费建站微商软文
  • 网站管理系统哪个最好晋中网站seo
  • 做网站 用 显示器网页设计与制作软件有哪些
  • 虚拟网站怎么做做网站公司哪家好
  • 网站的做用网站推广策划报告
  • 一个网站有几个快照seo入门黑帽培训教程
  • 工程设计东莞网站建设技术支持域名注册阿里云
  • 临邑县住房和城乡建设局网站下载百度语音导航地图
  • 客服网站制作seo网站推广工作内容
  • 申请域名后可以做自己的网站吗网络营销推广优化
  • 中文的网站做不成二维码seo优化是什么意思
  • 付费小说网站建设中国今天最新军事新闻
  • 庆云县建设局网站全国推广优化网站
  • 旅游做攻略网站网站建站流程
  • 定制网站建设公司软件推广赚钱
  • 公司为什么做网站福州seo网站管理
  • 有学做美食的网站吗线下推广都有什么方式
  • 免费b2b平台排名台州关键词优化服务
  • 网站目录结构图软件推广赚佣金渠道
  • seo及网络推广招聘某一网站seo策划方案
  • python做互金网站百度开户