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

安徽质量工程建设网站wordpress登录可见内容

安徽质量工程建设网站,wordpress登录可见内容,重庆市工程建设信息网中项网,高密做网站哪家强代理摘要 经过上一章#xff0c;我们得到的FilberNode已经具有了child和return属性。一颗Filber树的结构已经展现出来了。 那我们最终是想在页面渲染真实的DOM。所以我们现在要在completeWork里#xff0c;构建出一颗离屏的DOM树。 之前在说FilberNode的属性时#xff0c;我们…摘要 经过上一章我们得到的FilberNode已经具有了child和return属性。一颗Filber树的结构已经展现出来了。 那我们最终是想在页面渲染真实的DOM。所以我们现在要在completeWork里构建出一颗离屏的DOM树。 之前在说FilberNode的属性时我们提到过一个属性stateNode。它就是用来保存每个FilberNode的真实DOM。 OK现在我们开干准备实现completeWork。 1.completeWork方法 在completeWork方法里我们将刚才准备好的FilberNode最外层的传进来。 completeWork方法也一定是一个递归的过程每次调用的时候我们要判断当前的FilberNode的tag类型。 在判断当前的FilberNode是否具有stateNode如果有就说明不是第一次更新。如果没有就说明此时是mount第一次渲染的阶段。 export const completeWork (filberNode) {console.log(filberNode);const tag filberNode.tagswitch (tag) {case HostComponent: {if(filberNode.stateNode ! null){//更新}else{completeHostComponent(filberNode)}break;}case HostText: {break;}case HostRoot: {}} }2.创建真实DOM 拿到每个FilberNode后如果他是HostComponent类型的。我们实现出completeWork方法。 首先我们可以通过拿到FilberNode的typedivspan知道真实DOM的类型通过document的方法创建出对应的element。 然后再通过return属性拿到当前节点的父节点。并且在父节点的stateNode中添加创建好的element。 function completeHostComponent(filberNode) {const type filberNode.type;const element document.createElement(type);filberNode.stateNode element;const parent filberNode.return;if(parent parent.stateNode parent.tag HostComponent) {parent.stateNode.appendChild(element)}completeWork(filberNode.child) }对于HostText类型我们可以直接创建文本节点然后挂载在stateNode上面即可 function completeHostText(filberNode) {const content filberNode.pendingProps;const element document.createTextNode(content)filberNode.stateNode elementconst parent filberNode.return;if(parent parent.stateNode parent.tag HostComponent) {parent.stateNode.appendChild(element)} }这里值得注意的是在创建真实DOM的时候这里并没有处理props相关的内容。只创建了对应的DOM结构。 3.挂载finishedWork 最后我们将执行完beginWork和completeWork的FilberRootNode。挂载在hostRootFilber上面 function updateContainer(root, element) {const hostRootFilber root.current;const update createUpdate(element);hostRootFilber.updateQueue createUpdateQueue()enqueueUpdate(hostRootFilber.updateQueue, update);beginWork(hostRootFilber);completeWork(hostRootFilber);root.finishedWork hostRootFilber; }4.问题 这里我们打印一下root可以看到 root的current和finishedWork其实是一模一样的但React其实并非是这样处理的。经过beginWork和completeWork处理的节点并不是最外层的FilberNode而是它的alternate。 所以我们调用beginWork和completeWork处理的应该是FilberNode的alternate。 5.效果 为了看到效果我们可以写一个方法当然这个方法里面内容不可能这没少。但是我们可以先实现一下 export function commitWork(filberRootNode) {const container filberRootNode.container;const child filberRootNode.finishedWork.child.stateNode;container.appendChild(child) }然后再beginWork和completeWork执行完后执行这个方法。 就可以看到页面正产渲染节点了。
http://www.dnsts.com.cn/news/138438.html

相关文章:

  • 网站空间ftp下载慢制作企业网站与app有什么不同
  • 怎么提高自己网站的流量产品推广方案策划书
  • 南昌市,做网站的公司抖音引流推广免费软件app
  • 淘宝导购网站建设北京企业网站案例
  • 手机能看的网站有哪些wordpress 重复标题
  • 如何设计旅游网站的域名有做lol直播网站有哪些人
  • 中国室内设计师协会深圳做网站优化的公司
  • 怎么样用html做asp网站网站设计师如何让客户信任你
  • 建设金融行业网站淘宝网页版电脑版入口淘宝网
  • 门户网站建设的公司成都销售型网站
  • 推广网站挣钱 优帮云网站搭建教程零基础
  • 怎样更新网站wordpress 强制换行
  • 工商网站查询企业信息查询官网关键词网站优化平台
  • 怎么给网站设置搜索关键词 wordpress网站建设课程体会
  • 长沙便宜网站建设英语门户网站织梦源码
  • 简述电子商务网站建设的基本要求6网络股权设计培训课程
  • 网站宣传的重要性安徽建设网
  • 网站制作赚钱吗网站开发动静分离实践
  • 免费行情软件网站有哪些开店怎么做会员系统
  • 像网站的ppt怎么做的百度认证官网
  • pc和移动端网站跳转那个平台能免费做网站
  • 网站域名的分类阿里云免费服务器
  • 专业网站建设最新报价网站建设学习网站
  • 织梦网站主页地址更改厦门创意互动网站建设
  • 苏州个人网站制作亳州公司做网站
  • 增城百度做网站多少钱自学网站建设教程
  • winxp下做网站信息化建设
  • 深圳网站设计公司招聘前端转行可以找啥工作
  • 医疗网站建设网站深圳设计收费标准
  • 北京师范大学学风建设专题网站做相册视频的网站