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

宜昌网站排名优化建e全景app

宜昌网站排名优化,建e全景app,海口建站程序,汉中做网站PortalComponent 1 #xff09;概述 React Portal之所以叫Portal#xff0c;因为做的就是和“传送门”一样的事情render到一个组件里面去#xff0c;实际改变的是网页上另一处的DOM结构主要关注 portal的创建, 调和, 更新过程 2 #xff09;源码 定位到 packages/react-…PortalComponent 1 概述 React Portal之所以叫Portal因为做的就是和“传送门”一样的事情render到一个组件里面去实际改变的是网页上另一处的DOM结构主要关注 portal的创建, 调和, 更新过程 2 源码 定位到 packages/react-dom/src/client/ReactDOM.js#L576 function createPortal(children: ReactNodeList,container: DOMContainer,key: ?string null, ) {invariant(isValidContainer(container),Target container is not a DOM element.,);// TODO: pass ReactDOM portal implementation as third argumentreturn ReactPortal.createPortal(children, container, null, key); } 这里调用的是 ReactPortal.createPortal, 进入 // packages/shared/ReactPortal.js#L14 export function createPortal(children: ReactNodeList,containerInfo: any,// TODO: figure out the API for cross-renderer implementation.implementation: any,key: ?string null, ): ReactPortal {return {// This tag allow us to uniquely identify this as a React Portal$$typeof: REACT_PORTAL_TYPE,key: key null ? null : key,children,containerInfo, // dom 挂载节点implementation,}; }这里返回一个对象类似于 ReactElement区别在于 $$typeof 和 containerInfo 需要的挂载点 对于 REACT_PORTAL_TYPE 类型的组件在 reconcile 时, 看下具体操作, 找到 reconcileSinglePortal // packages/react-reconciler/src/ReactChildFiber.js#L1171 function reconcileSinglePortal(returnFiber: Fiber,currentFirstChild: Fiber | null,portal: ReactPortal,expirationTime: ExpirationTime, ): Fiber {const key portal.key; // 当前的 keylet child currentFirstChild;// 如果 存在 child, 对比 child.key keywhile (child ! null) {// TODO: If key null and child.key null, then this only applies to// the first item in the list.if (child.key key) {// 关注这里有 containerInfo 的对比portal 需要关心渲染到的节点是否有变化// 如果节点有变化那么这个 portal 的渲染过程也会有变化// 都符合说明老节点都可以复用if (child.tag HostPortal child.stateNode.containerInfo portal.containerInfo child.stateNode.implementation portal.implementation) {deleteRemainingChildren(returnFiber, child.sibling); // 删除其他节点// 通过 useFiber 复用这个节点const existing useFiber(child,portal.children || [],expirationTime,);existing.return returnFiber;return existing;} else {// key相同但是不符合上述if, 没法复用删除干净deleteRemainingChildren(returnFiber, child);break;}} else {// key 不同删除当前节点deleteChild(returnFiber, child);}child child.sibling;}// 创建一个 portal 的 fiber 对象const created createFiberFromPortal(portal,returnFiber.mode,expirationTime,);created.return returnFiber;return created; }对于更新一个portal节点进入 updatePortalComponent // packages/react-reconciler/src/ReactFiberBeginWork.js#L1322 function updatePortalComponent(current: Fiber | null,workInProgress: Fiber,renderExpirationTime: ExpirationTime, ) {// 挂载点处理pushHostContainer(workInProgress, workInProgress.stateNode.containerInfo);const nextChildren workInProgress.pendingProps; // 这里 pendingProps 是 childrenif (current null) {// Portals are special because we dont append the children during mount// but at commit. Therefore we need to track insertions which the normal// flow doesnt do during mount. This doesnt happen at the root because// the root always starts with a current with a null child.// TODO: Consider unifying this with how the root works.workInProgress.child reconcileChildFibers(workInProgress,null,nextChildren,renderExpirationTime,);} else {reconcileChildren(current,workInProgress,nextChildren,renderExpirationTime,);}return workInProgress.child; }之前梳理过的 API 不再赘述一些API的调用在源码的注释中
http://www.sczhlp.com/news/247494/

相关文章:

  • 淘宝网站制作教程手机搞笑网站模板下载安装
  • 怎么制作公司自己网站足球比赛直播回放完整版
  • 企业网站优化兴田德润优惠wordpress 基础主题
  • 学编程可以建设网站吗个人网站的开发与设计
  • 广西南宁网络营销网站网页设计图模板
  • 商业性质网站设计上海网站建设服务是什么
  • c#+开发网站开发应用公园制作app免费吗
  • 唐山医疗网站建设建设网站首页应该采用
  • 大学生建设网站网站的推广方案的内容有哪些
  • 平台宣传推广方案汕头网站排名优化
  • 网站设计排行天津市建设工程定额管理站网站
  • 公司推广网站怎么做微信 网站提成方案点做
  • 宝安网站制作网站建设图片展示网站
  • 左侧导航栏网站wordpress前台显示友链
  • 河北承德网郴州网站优化
  • 性能优化:两条SQL索引优化,CPU占用率从40%降至25%
  • 2025铜/铝/通信/光伏/风电/废旧/工地/橡套/电缆回收推荐榜:定兴广瑞五星领跑!京津冀绿色回收 + 高效拆解,3 企业凭工业 / 通讯 / 性价比显优势
  • 2025年武汉小型车出租厂家服务商推荐榜单,实用出行参考,防撞车出租,高空车出租,登高车出租厂家推荐
  • 目前靠谱的除甲醛公司哪家好:2025年权威除甲醛服务对比分析
  • 2025值得关注的小型面粉机厂家榜单,适配多场景加工需求,大型面粉机,石磨面粉机,杂粮面粉机厂家推荐
  • 提供免费网站建设浙江建设厅特种考试查询
  • 梧州网站seo电子商务网站建设实训需求分析
  • 网站设计的公司选哪家网络推广推广外包服务
  • 无锡网站建设 微信鲜花品牌网站建设
  • win2008r2 iis配置网站南京网站维护公司
  • 兰州市政建设集团办公网站做非物质文化遗产网站的风险
  • 营销型网站建设信融在线照片编辑工具
  • 成品网站灬源码1688wordpress安装无法登录
  • 东莞行业网站建设自有服务器怎么做网站备案
  • 贵阳哪家网站建设公司好怎么自己做电影网站