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

畔游网站建设谷歌推广开户

畔游网站建设,谷歌推广开户,重庆展示型网站制作,专业网站建设找哪家公司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.hrbkazy.com/news/10365.html

相关文章:

  • 电子商务网站建设教材推广信息怎么写
  • 做业务网站爱站网注册人查询
  • 360建筑网 官方网站百度sem是什么
  • 加强政府网站信息内容建设网站推广怎么推广
  • 成都网站建设-中国互联抖音推广引流平台
  • 武汉大学人民医院经开医院郑州seo哪家好
  • 常州网站建设方案今日热搜头条
  • 网站页面设计欣赏模板宁波网站推广找哪家公司
  • 英文网站建设需求荥阳seo
  • 网站建设最新模板下载优秀品牌策划方案
  • 网站交易模块怎么做爱站网权重查询
  • 怎么提高网站的权重网络广告名词解释
  • 大腕 网站建设qq群推广拉人
  • 淮安做网站的公司有哪些公司关键词优化的方法有哪些
  • ai怎么做网站用海报北京互联网公司有哪些
  • 吉林网站建设司视频营销的策略与方法
  • 保定建设厅网站引流推广多少钱一个
  • 邯郸网站推广怎么做电商培训学校
  • 漯河市郾城区网站建设贵阳网站建设制作
  • 网站改版建议书市场推广方式有哪几种
  • 上海网站建设联系电话河北百度seo点击软件
  • 陕西富通建设工程有限公司网站网站目录
  • 个人网站取什么域名好搜索引擎营销的主要模式有哪些
  • 电子商务网站建设策划账号权重查询入口
  • 开发网站公司名称沈阳网站关键字优化
  • 宿豫网站建设制作免费发帖推广网站
  • 济南网站建设报价黑帽seo技术
  • 徐东做网站网站排名提升软件
  • 网站制作工具新品推广计划与方案
  • 互联网网站制作公司网络优化工程师为什么都说坑人