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

有什么网站可以做团购安卓应用开发环境

有什么网站可以做团购,安卓应用开发环境,wordpress 资讯,网页空间是什么摘要 在上一篇中#xff0c;实现了多节点的渲染。但是之前写得diff算法#xff0c;只能适用于单节点的情况#xff0c;例如这种情况#xff1a; divpspan/span/p /div如果对于多节点的情况#xff1a; ul…摘要 在上一篇中实现了多节点的渲染。但是之前写得diff算法只能适用于单节点的情况例如这种情况 divpspan/span/p /div如果对于多节点的情况 ulli/lili/lili/li /ul之前实现的diff算法就不会有效果了所以在这一篇中我们主要实现针对于多节点的diff算法。 实现之前我们先将index.js修改一下 function App() {const [num, setNum] useState(100)const click1 () {console.log(num);setNum(num 1)}return num % 2 0 ? jsx(ul, {onClick: click1,key: ul,children: [jsx(li, {children: 1,key: 1}), jsx(li, {children: 2,key: 2}), jsx(li, {children: 3,key: 3})]}): jsx(ul, {onClick: click1,key: ul,children: [jsx(li, {children: 2,key: 2}), jsx(li, {children: 1,key: 1}), jsx(li, {children: 3,key: 3})]}); }ReactDOM.createRoot(root).render(App /)1.修改beginWork流程 在reconcileChildren方法里面我们判断了如果element为数组的情况就是多节点。所以我们需要在这里进行diff算法的处理。 function reconcileChildren(parent,element) {//其他代码。。。。}else if(Array.isArray(element) element.length 0) {const newChild diffReconcileManyChildren(parent, element);if(newChild) {return newChild}//其他代码。。。。所以我们的diff算法那主要是在diffReconcileManyChildren方法里面实现。 对于多节点的Diff我们需要进行以下步骤。 创建变量lastIndex用来标记索引将旧的filberNode列表转换为map结构key为filberNode的keyvalue为filberNode遍历新的element数组。如果element.key可以在map中找到lastIndex记录为找到的filberNode的index如果找不到创建新的FilberNode继续遍历如果又在map中找到filberNode比较fiberNode的index和lastIndex.如果index lastIndex给filberNode打上移动的标志 基于上面的步骤实现diffReconcileManyChildren方法 function diffReconcileManyChildren(filberNode, element) {let firstChild filberNode.child;if(!firstChild) {return;}const head {sibling: null};const oldChildren []while(firstChild) {oldChildren.push(firstChild);firstChild firstChild.sibling;}const oldMap new Map();oldChildren.forEach((item,index) {item.index indexif(item.key) {oldMap.set(item.key, item)}else{oldMap.set(index, item)}})let lastIndex 0;let empty headfor(let i0; ielement.length; i) {if(!element[i].key){continue;}const useFilber oldMap.get(element[i].key);useFilber.sibling null;if(useFilber) {if(useFilber.index lastIndex) {useFilber.flags insert}useFilber.memoizedProps element[i]lastIndex useFilber.index;empty.sibling useFilber;empty empty.sibling;oldMap.delete(element[i].key)}else{const filberNode new FilberNode(HostComponent, element[i].props, element[i].key) filberNode.type element[i].typeempty.sibling filberNode;empty empty.sibling;}}return head.sibling; }经过上面的处理beginWork流程结束可复用的filberNode就不会重复创建。 2.修改completeWork流程 在beginWork中可复用的节点已经被打上了insert的标志所以在updateCompleteHsotComponent中我们要判断是不是insert的标志如果是就不能无脑创建而是通过移动DOM的位置来复用DOM。 同时也要对同级的sibling进行递归处理。 function updateCompleteHostComponent(filberNode) {//其他代码。。。。if(element.key filberNode.key element.type filberNode.type) {addPropsToDOM(filberNode.stateNode, filberNode.pendingProps);if(filberNode.flags insert) {const parent filberNode.return;parent.stateNode.insertBefore(filberNode.stateNode, filberNode.sibling?.stateNode)}//其他代码if(filberNode.sibling) {completeWork(filberNode.sibling)} }在对HostText的处理中也要考虑当前的操作是更新还是替换。 function completeHostText(filberNode) {//其他代码。。。。。if(parent parent.stateNode parent.tag HostComponent) {if(!parent.stateNode) {parent.stateNode.appendChild(element);}else{parent.stateNode.replaceChildren(element);}}//其他代码。。。。 }
http://www.eeditor.cn/news/125688/

相关文章:

  • 茂名网站开发服务商2023企业税收标准
  • 个体工商户软件开发网站建设维护淘宝网站建设合同
  • 网站建设所有软件清单wordpress怎么做伪静态
  • 郴州做网站 郴网互联域名查询ip138
  • 温州网站建设哪家好网站需要多大宽带
  • 龙岗区住房和建设局官方网站做网站 卖会员
  • 手机搜索和网站搜索的排名audio for wordpress
  • 长春建站企业百度推广教程视频教程
  • dede双语网站电子商务网站建设目标及利益分析
  • 网站原创文章不收录页面设计包括哪些内容
  • 网站都需要续费吗开发网站通过第三方微信认证登录开发费用
  • 网站建设方案怎么做医院英文网站建设
  • 河南网站开发培训价格百度关键词优化平台
  • 旅游网站建设开题报告北京企业建站定制
  • 服务器上给网站做301跳转wordpress文章同步微信
  • 凡科网站的ftpwordpress怎么改导航
  • 包头做网站的公司招聘信息企业网站建设和运营
  • Wordpress网站删除多余主题华为荣耀官网网站
  • 安徽做网站找谁营销平台网站建设
  • 衡水哪有做网站的网站推广
  • 怎么备案网站网站上传图片尺寸
  • 建设法规的网站企业建设网站对客户的好处
  • 天津狐臭在哪里做津门网站I国际国内时事
  • 视频上传网站如何做推广软件的渠道有哪些
  • 网站页中繁体转移代码wordpress 加入搜索引擎
  • 网站域名试用期大河网
  • 深圳摇号申请网站网站建设的安全措施
  • 网站开发 数字证书WordPress设置会话有效时间
  • 网站建设需要使用阿里云吗大型网站的建设
  • 教育培训网站网站源模板