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

制作商城网站公司网站内容的作用

制作商城网站公司,网站内容的作用,数码网站建设维护,可以用手机制作app的软件IndeterminateComponent 1 #xff09;概述 这是一个比较特殊的component的类型#xff0c; 就是还没有被指定类型的component在一个fibrer被创建的时候#xff0c;它的tag可能会是 IndeterminateComponent在 packages/react-reconciler/src/ReactFiber.js 中#xff0c;有…IndeterminateComponent 1 概述 这是一个比较特殊的component的类型 就是还没有被指定类型的component在一个fibrer被创建的时候它的tag可能会是 IndeterminateComponent在 packages/react-reconciler/src/ReactFiber.js 中有一个方法createFiberFromTypeAndProps 中一开始就声明了let fiberTag IndeterminateComponent; let resolvedType type; // 一开始 if (typeof type function) {// 在 function 下只是判断了 constructor是否存在// 在不存在的时候是否认为它是一个 FunctionComponent 呢实际上并没有// 实际上我们写的任何一个 function component 一开始就是 IndeterminateComponent 类型if (shouldConstruct(type)) {// 存在则赋值为 ClassComponentfiberTag ClassComponent;} } else if (typeof type string) {fiberTag HostComponent; } else {// 省略 }在最终调用 createFiber 创建 Fiber 对象 2 源码 定位到 packages/react-reconciler/src/ReactFiber.js 进入 mountIndeterminateComponent 方法 // function mountIndeterminateComponent(_current,workInProgress,Component,renderExpirationTime, ) {// 首先判断 _current 是否存在存在则进行初始化操作// 因为只有在第一次渲染的时候才有 indeterminate component 这种情况// 经过第一次渲染之后我们就会发现 indeterminate component 的具体的类型// 这种情况可能是中途抛出一个 error 或 promise 等情况比如 Suspense 组件// 这时候初始化是为了 去除 _current 和 workInProgress 相关联系因为需要重新进行初次渲染的流程if (_current ! null) {// An indeterminate component only mounts if it suspended inside a non-// concurrent tree, in an inconsistent state. We want to treat it like// a new mount, even though an empty version of it already committed.// Disconnect the alternate pointers._current.alternate null;workInProgress.alternate null;// Since this is conceptually a new fiber, schedule a Placement effectworkInProgress.effectTag | Placement;}const props workInProgress.pendingProps;const unmaskedContext getUnmaskedContext(workInProgress, Component, false);const context getMaskedContext(workInProgress, unmaskedContext);prepareToReadContext(workInProgress, renderExpirationTime);prepareToUseHooks(null, workInProgress, renderExpirationTime);let value;if (__DEV__) {if (Component.prototype typeof Component.prototype.render function) {const componentName getComponentName(Component) || Unknown;if (!didWarnAboutBadClass[componentName]) {warningWithoutStack(false,The %s / component appears to have a render method, but doesnt extend React.Component. This is likely to cause errors. Change %s to extend React.Component instead.,componentName,componentName,);didWarnAboutBadClass[componentName] true;}}if (workInProgress.mode StrictMode) {ReactStrictModeWarnings.recordLegacyContextWarning(workInProgress, null);}ReactCurrentOwner.current workInProgress;value Component(props, context); } else {value Component(props, context); // 调用 Component 方法}// React DevTools reads this flag.workInProgress.effectTag | PerformedWork;// 符合这个条件认为是 ClassComponent, 具有 render 方法if (typeof value object value ! null typeof value.render function value.$$typeof undefined) {// Proceed under the assumption that this is a class instanceworkInProgress.tag ClassComponent; // 这里认为它是一个 ClassComponent// Throw out any hooks that were used.resetHooks();// Push context providers early to prevent context stack mismatches.// During mounting we dont know the child context yet as the instance doesnt exist.// We will invalidate the child context in finishClassComponent() right after rendering.let hasContext false;if (isLegacyContextProvider(Component)) {hasContext true;pushLegacyContextProvider(workInProgress);} else {hasContext false;}workInProgress.memoizedState value.state ! null value.state ! undefined ? value.state : null;const getDerivedStateFromProps Component.getDerivedStateFromProps;if (typeof getDerivedStateFromProps function) {applyDerivedStateFromProps(workInProgress,Component,getDerivedStateFromProps,props,);}adoptClassInstance(workInProgress, value);mountClassInstance(workInProgress, Component, props, renderExpirationTime);return finishClassComponent(null,workInProgress,Component,true,hasContext,renderExpirationTime,);} else {// 否则按照 FunctionComponent 来渲染// Proceed under the assumption that this is a function componentworkInProgress.tag FunctionComponent; value finishHooks(Component, props, value, context);if (__DEV__) {if (Component) {warningWithoutStack(!Component.childContextTypes,%s(...): childContextTypes cannot be defined on a function component.,Component.displayName || Component.name || Component,);}if (workInProgress.ref ! null) {let info ;const ownerName ReactCurrentFiber.getCurrentFiberOwnerNameInDevOrNull();if (ownerName) {info \n\nCheck the render method of ownerName .;}let warningKey ownerName || workInProgress._debugID || ;const debugSource workInProgress._debugSource;if (debugSource) {warningKey debugSource.fileName : debugSource.lineNumber;}if (!didWarnAboutFunctionRefs[warningKey]) {didWarnAboutFunctionRefs[warningKey] true;warning(false,Function components cannot be given refs. Attempts to access this ref will fail.%s,info,);}}if (typeof Component.getDerivedStateFromProps function) {const componentName getComponentName(Component) || Unknown;if (!didWarnAboutGetDerivedStateOnFunctionComponent[componentName]) {warningWithoutStack(false,%s: Function components do not support getDerivedStateFromProps.,componentName,);didWarnAboutGetDerivedStateOnFunctionComponent[componentName] true;}}if (typeof Component.contextType object Component.contextType ! null) {const componentName getComponentName(Component) || Unknown;if (!didWarnAboutContextTypeOnFunctionComponent[componentName]) {warningWithoutStack(false,%s: Function components do not support contextType.,componentName,);didWarnAboutContextTypeOnFunctionComponent[componentName] true;}}}reconcileChildren(null, workInProgress, value, renderExpirationTime);return workInProgress.child;} }基于上述判断条件 能认定是一个 ClassComponent后续渲染一定会按照 ClassComponent 进行 if ( typeof value object value ! null typeof value.render function value.$$typeof undefined ){} 现在来测试一下看下 function component 是否可以执行import React from reactexport default function TestIndeterminationComponent() {return {componentDidMount() {console.log(invoker)},render() {return spanaaa/span}} }上述都能正常显示以及打印 console 输出也就是说对于一个 function component, 如果里面 return 的对象具有 render 方法就认为它是一个 class component 一样的类型去使用它并且在里面声明的生命周期方法都会被它调用这是 IndeterminateComponent 的特性 在最初我们渲染的时候所有的 function component 都是 IndeterminateComponent 的类型在第一次渲染之后我们根据渲染类型的返回最终得到具体类型可以通过 function component 返回一个对象的方式去渲染一个类似 classComponent 这样的类型注意一般不推荐这么写
http://www.dnsts.com.cn/news/231211.html

相关文章:

  • 企业网站用织梦好吗域名查询万网
  • 网站修改文案河南自己怎么做网站
  • 国外优秀论文网站建设工程备案网站
  • 北京网站开发公司有哪些如何申请cn域名做网站
  • 免费的网站域名和空间济南做网站 推荐行知科技
  • 品牌网站建设 蝌蚪小8工艺品网站建设开发
  • 什么网站需要数据库南宁网页搭建软件
  • 怎么学做网站PHP灰色词seo排名
  • 什么是手机网站展厅展览设计
  • 建设广告网站免费发布信息的网站平台有哪些
  • 医疗器械网站建设方案企业网站免费建设工具
  • 怎么做百度搜到的网站免费的团结湖网站建设
  • 威海网站开发宣传片拍摄计划方案
  • 鹰潭网站商城建设wordpress编辑器添加字体大小
  • 谷歌网站提交入口女孩子做电商运营是不是压力很大
  • 网站上的链接怎么做的google play谷歌商店
  • 免费做App和网站的平台郑州住房和城乡建设厅网站
  • 营销型网站建设与网页设计烟台哪里有做网站
  • 怎么查询网站ftp地址wordpress下载慢
  • 普通营业执照有做网站条件吗平凉市网站建设
  • 创建网站选哪家好wordpress邮箱汉化插件下载地址
  • 网站的市场如何制作wordpress php 得到页面描述
  • 网站建设开发多少钱济南营销网站制作
  • 网站制作建设兴田德拼多多网上购物商城
  • 德国室内设计网站鲁班设计工作平台
  • 做食品网站的素材手机网站建设在哪儿
  • 制作网站免费建站小说网站源码html
  • 太原网站建设名录泰安网络推广公司怎么样
  • 如何在网站上显示百度权重自己开发一个手机网站
  • 做个什么样的网站比较好做ps兼职的网站