reconcileChildren
params
- current
- workInProgress
nextChildren
- class 组件: instance.render()
- 函数组件: return 的值
- renderLanes
function reconcileChildren(current, workInProgress, nextChildren, renderLanes) { if (current === null) { workInProgress.child = mountChildFibers( workInProgress, null, nextChildren, renderLanes ); } else { workInProgress.child = reconcileChildFibers( workInProgress, current.child, nextChildren, renderLanes ); }}
reconcileChildFibers
params
- returnFiber
- currentFirstChild
newChild
- class 组件: instance.render()
- 函数组件: return 的值
- lanes
function reconcileChildFibers(returnFiber, currentFirstChild, newChild, lanes) { var isUnkeyedTopLevelFragment = typeof newChild === "object" && newChild !== null && newChild.type === REACT_FRAGMENT_TYPE && newChild.key === null; if (isUnkeyedTopLevelFragment) { newChild = newChild.props.children; } var isObject = typeof newChild === "object" && newChild !== null; if (isObject) { switch (newChild.$$typeof) { // reconcileSingleElement case REACT_ELEMENT_TYPE: return placeSingleChild( reconcileSingleElement( returnFiber, currentFirstChild, newChild, lanes ) ); case REACT_PORTAL_TYPE: return placeSingleChild( reconcileSinglePortal(returnFiber, currentFirstChild, newChild, lanes) ); } } if (typeof newChild === "string" || typeof newChild === "number") { return placeSingleChild( reconcileSingleTextNode( returnFiber, currentFirstChild, "" + newChild, lanes ) ); } // 数组时 if (isArray$1(newChild)) { return reconcileChildrenArray( returnFiber, currentFirstChild, newChild, lanes ); } if (getIteratorFn(newChild)) { return reconcileChildrenIterator( returnFiber, currentFirstChild, newChild, lanes ); } if (isObject) { throwOnInvalidObjectType(returnFiber, newChild); } { if (typeof newChild === "function") { warnOnFunctionType(returnFiber); } } if (typeof newChild === "undefined" && !isUnkeyedTopLevelFragment) { switch (returnFiber.tag) { case ClassComponent: { { var instance = returnFiber.stateNode; if (instance.render._isMockFunction) { break; } } } case Block: case FunctionComponent: case ForwardRef: case SimpleMemoComponent: { { { throw Error( (getComponentName(returnFiber.type) || "Component") + "(...): Nothing was returned from render. This usually means a return statement is missing. Or, to render nothing, return null." ); } } } } } return deleteRemainingChildren(returnFiber, currentFirstChild);}
createFiberFromElement
params
- element: ReactElement 对象
- mode
- lanes
性能
执行 createFiberFromTypeAndProps,创立 Fiber
- 创立 createFiber: fiber.elementType = type;
代码
function createFiberFromElement(element, mode, lanes) { var owner = null; { owner = element._owner; } var type = element.type; var key = element.key; var pendingProps = element.props; var fiber = createFiberFromTypeAndProps( type, key, pendingProps, // element.props owner, mode, lanes ); { fiber._debugSource = element._source; fiber._debugOwner = element._owner; } return fiber;}