Best JavaScript code snippet using playwright-internal
ReactFiberBeginWork.js
Source:ReactFiberBeginWork.js
...312 // to a SimpleMemoComponent to allow fast path updates.313 workInProgress.tag = SimpleMemoComponent;314 workInProgress.type = type;315 if (__DEV__) {316 validateFunctionComponentInDev(workInProgress, type);317 }318 return updateSimpleMemoComponent(319 current,320 workInProgress,321 type,322 nextProps,323 updateExpirationTime,324 renderExpirationTime,325 );326 }327 if (__DEV__) {328 const innerPropTypes = type.propTypes;329 if (innerPropTypes) {330 // Inner memo component props aren't currently validated in createElement.331 // We could move it there, but we'd still need this for lazy code path.332 checkPropTypes(333 innerPropTypes,334 nextProps, // Resolved props335 'prop',336 getComponentName(type),337 getCurrentFiberStackInDev,338 );339 }340 }341 let child = createFiberFromTypeAndProps(342 Component.type,343 null,344 nextProps,345 null,346 workInProgress.mode,347 renderExpirationTime,348 );349 child.ref = workInProgress.ref;350 child.return = workInProgress;351 workInProgress.child = child;352 return child;353 }354 if (__DEV__) {355 const type = Component.type;356 const innerPropTypes = type.propTypes;357 if (innerPropTypes) {358 // Inner memo component props aren't currently validated in createElement.359 // We could move it there, but we'd still need this for lazy code path.360 checkPropTypes(361 innerPropTypes,362 nextProps, // Resolved props363 'prop',364 getComponentName(type),365 getCurrentFiberStackInDev,366 );367 }368 }369 let currentChild = ((current.child: any): Fiber); // This is always exactly one child370 if (updateExpirationTime < renderExpirationTime) {371 // This will be the props with resolved defaultProps,372 // unlike current.memoizedProps which will be the unresolved ones.373 const prevProps = currentChild.memoizedProps;374 // Default to shallow comparison375 let compare = Component.compare;376 compare = compare !== null ? compare : shallowEqual;377 if (compare(prevProps, nextProps) && current.ref === workInProgress.ref) {378 return bailoutOnAlreadyFinishedWork(379 current,380 workInProgress,381 renderExpirationTime,382 );383 }384 }385 // React DevTools reads this flag.386 workInProgress.effectTag |= PerformedWork;387 let newChild = createWorkInProgress(388 currentChild,389 nextProps,390 renderExpirationTime,391 );392 newChild.ref = workInProgress.ref;393 newChild.return = workInProgress;394 workInProgress.child = newChild;395 return newChild;396}397function updateSimpleMemoComponent(398 current: Fiber | null,399 workInProgress: Fiber,400 Component: any,401 nextProps: any,402 updateExpirationTime,403 renderExpirationTime: ExpirationTime,404): null | Fiber {405 // TODO: current can be non-null here even if the component406 // hasn't yet mounted. This happens when the inner render suspends.407 // We'll need to figure out if this is fine or can cause issues.408 if (__DEV__) {409 if (workInProgress.type !== workInProgress.elementType) {410 // Lazy component props can't be validated in createElement411 // because they're only guaranteed to be resolved here.412 let outerMemoType = workInProgress.elementType;413 if (outerMemoType.$$typeof === REACT_LAZY_TYPE) {414 // We warn when you define propTypes on lazy()415 // so let's just skip over it to find memo() outer wrapper.416 // Inner props for memo are validated later.417 outerMemoType = refineResolvedLazyComponent(outerMemoType);418 }419 const outerPropTypes = outerMemoType && (outerMemoType: any).propTypes;420 if (outerPropTypes) {421 checkPropTypes(422 outerPropTypes,423 nextProps, // Resolved (SimpleMemoComponent has no defaultProps)424 'prop',425 getComponentName(outerMemoType),426 getCurrentFiberStackInDev,427 );428 }429 // Inner propTypes will be validated in the function component path.430 }431 }432 if (current !== null) {433 const prevProps = current.memoizedProps;434 if (435 shallowEqual(prevProps, nextProps) &&436 current.ref === workInProgress.ref437 ) {438 didReceiveUpdate = false;439 if (updateExpirationTime < renderExpirationTime) {440 return bailoutOnAlreadyFinishedWork(441 current,442 workInProgress,443 renderExpirationTime,444 );445 }446 }447 }448 return updateFunctionComponent(449 current,450 workInProgress,451 Component,452 nextProps,453 renderExpirationTime,454 );455}456function updateFragment(457 current: Fiber | null,458 workInProgress: Fiber,459 renderExpirationTime: ExpirationTime,460) {461 const nextChildren = workInProgress.pendingProps;462 reconcileChildren(463 current,464 workInProgress,465 nextChildren,466 renderExpirationTime,467 );468 return workInProgress.child;469}470function updateMode(471 current: Fiber | null,472 workInProgress: Fiber,473 renderExpirationTime: ExpirationTime,474) {475 const nextChildren = workInProgress.pendingProps.children;476 reconcileChildren(477 current,478 workInProgress,479 nextChildren,480 renderExpirationTime,481 );482 return workInProgress.child;483}484function updateProfiler(485 current: Fiber | null,486 workInProgress: Fiber,487 renderExpirationTime: ExpirationTime,488) {489 if (enableProfilerTimer) {490 workInProgress.effectTag |= Update;491 }492 const nextProps = workInProgress.pendingProps;493 const nextChildren = nextProps.children;494 reconcileChildren(495 current,496 workInProgress,497 nextChildren,498 renderExpirationTime,499 );500 return workInProgress.child;501}502function markRef(current: Fiber | null, workInProgress: Fiber) {503 const ref = workInProgress.ref;504 if (505 (current === null && ref !== null) ||506 (current !== null && current.ref !== ref)507 ) {508 // Schedule a Ref effect509 workInProgress.effectTag |= Ref;510 }511}512function updateFunctionComponent(513 current,514 workInProgress,515 Component,516 nextProps: any,517 renderExpirationTime,518) {519 if (__DEV__) {520 if (workInProgress.type !== workInProgress.elementType) {521 // Lazy component props can't be validated in createElement522 // because they're only guaranteed to be resolved here.523 const innerPropTypes = Component.propTypes;524 if (innerPropTypes) {525 checkPropTypes(526 innerPropTypes,527 nextProps, // Resolved props528 'prop',529 getComponentName(Component),530 getCurrentFiberStackInDev,531 );532 }533 }534 }535 const unmaskedContext = getUnmaskedContext(workInProgress, Component, true);536 const context = getMaskedContext(workInProgress, unmaskedContext);537 let nextChildren;538 prepareToReadContext(workInProgress, renderExpirationTime);539 if (__DEV__) {540 ReactCurrentOwner.current = workInProgress;541 setCurrentPhase('render');542 nextChildren = renderWithHooks(543 current,544 workInProgress,545 Component,546 nextProps,547 context,548 renderExpirationTime,549 );550 if (551 debugRenderPhaseSideEffects ||552 (debugRenderPhaseSideEffectsForStrictMode &&553 workInProgress.mode & StrictMode)554 ) {555 // Only double-render components with Hooks556 if (workInProgress.memoizedState !== null) {557 nextChildren = renderWithHooks(558 current,559 workInProgress,560 Component,561 nextProps,562 context,563 renderExpirationTime,564 );565 }566 }567 setCurrentPhase(null);568 } else {569 nextChildren = renderWithHooks(570 current,571 workInProgress,572 Component,573 nextProps,574 context,575 renderExpirationTime,576 );577 }578 if (current !== null && !didReceiveUpdate) {579 bailoutHooks(current, workInProgress, renderExpirationTime);580 return bailoutOnAlreadyFinishedWork(581 current,582 workInProgress,583 renderExpirationTime,584 );585 }586 // React DevTools reads this flag.587 workInProgress.effectTag |= PerformedWork;588 reconcileChildren(589 current,590 workInProgress,591 nextChildren,592 renderExpirationTime,593 );594 return workInProgress.child;595}596function updateClassComponent(597 current: Fiber | null,598 workInProgress: Fiber,599 Component: any,600 nextProps,601 renderExpirationTime: ExpirationTime,602) {603 if (__DEV__) {604 if (workInProgress.type !== workInProgress.elementType) {605 // Lazy component props can't be validated in createElement606 // because they're only guaranteed to be resolved here.607 const innerPropTypes = Component.propTypes;608 if (innerPropTypes) {609 checkPropTypes(610 innerPropTypes,611 nextProps, // Resolved props612 'prop',613 getComponentName(Component),614 getCurrentFiberStackInDev,615 );616 }617 }618 }619 // Push context providers early to prevent context stack mismatches.620 // During mounting we don't know the child context yet as the instance doesn't exist.621 // We will invalidate the child context in finishClassComponent() right after rendering.622 let hasContext;623 if (isLegacyContextProvider(Component)) {624 hasContext = true;625 pushLegacyContextProvider(workInProgress);626 } else {627 hasContext = false;628 }629 prepareToReadContext(workInProgress, renderExpirationTime);630 const instance = workInProgress.stateNode;631 let shouldUpdate;632 if (instance === null) {633 if (current !== null) {634 // An class component without an instance only mounts if it suspended635 // inside a non- concurrent tree, in an inconsistent state. We want to636 // tree it like a new mount, even though an empty version of it already637 // committed. Disconnect the alternate pointers.638 current.alternate = null;639 workInProgress.alternate = null;640 // Since this is conceptually a new fiber, schedule a Placement effect641 workInProgress.effectTag |= Placement;642 }643 // In the initial pass we might need to construct the instance.644 constructClassInstance(645 workInProgress,646 Component,647 nextProps,648 renderExpirationTime,649 );650 mountClassInstance(651 workInProgress,652 Component,653 nextProps,654 renderExpirationTime,655 );656 shouldUpdate = true;657 } else if (current === null) {658 // In a resume, we'll already have an instance we can reuse.659 shouldUpdate = resumeMountClassInstance(660 workInProgress,661 Component,662 nextProps,663 renderExpirationTime,664 );665 } else {666 shouldUpdate = updateClassInstance(667 current,668 workInProgress,669 Component,670 nextProps,671 renderExpirationTime,672 );673 }674 const nextUnitOfWork = finishClassComponent(675 current,676 workInProgress,677 Component,678 shouldUpdate,679 hasContext,680 renderExpirationTime,681 );682 if (__DEV__) {683 let inst = workInProgress.stateNode;684 if (inst.props !== nextProps) {685 warning(686 didWarnAboutReassigningProps,687 'It looks like %s is reassigning its own `this.props` while rendering. ' +688 'This is not supported and can lead to confusing bugs.',689 getComponentName(workInProgress.type) || 'a component',690 );691 didWarnAboutReassigningProps = true;692 }693 }694 return nextUnitOfWork;695}696function finishClassComponent(697 current: Fiber | null,698 workInProgress: Fiber,699 Component: any,700 shouldUpdate: boolean,701 hasContext: boolean,702 renderExpirationTime: ExpirationTime,703) {704 // Refs should update even if shouldComponentUpdate returns false705 markRef(current, workInProgress);706 const didCaptureError = (workInProgress.effectTag & DidCapture) !== NoEffect;707 if (!shouldUpdate && !didCaptureError) {708 // Context providers should defer to sCU for rendering709 if (hasContext) {710 invalidateContextProvider(workInProgress, Component, false);711 }712 return bailoutOnAlreadyFinishedWork(713 current,714 workInProgress,715 renderExpirationTime,716 );717 }718 const instance = workInProgress.stateNode;719 // Rerender720 ReactCurrentOwner.current = workInProgress;721 let nextChildren;722 if (723 didCaptureError &&724 typeof Component.getDerivedStateFromError !== 'function'725 ) {726 // If we captured an error, but getDerivedStateFrom catch is not defined,727 // unmount all the children. componentDidCatch will schedule an update to728 // re-render a fallback. This is temporary until we migrate everyone to729 // the new API.730 // TODO: Warn in a future release.731 nextChildren = null;732 if (enableProfilerTimer) {733 stopProfilerTimerIfRunning(workInProgress);734 }735 } else {736 if (__DEV__) {737 setCurrentPhase('render');738 nextChildren = instance.render();739 if (740 debugRenderPhaseSideEffects ||741 (debugRenderPhaseSideEffectsForStrictMode &&742 workInProgress.mode & StrictMode)743 ) {744 instance.render();745 }746 setCurrentPhase(null);747 } else {748 nextChildren = instance.render();749 }750 }751 // React DevTools reads this flag.752 workInProgress.effectTag |= PerformedWork;753 if (current !== null && didCaptureError) {754 // If we're recovering from an error, reconcile without reusing any of755 // the existing children. Conceptually, the normal children and the children756 // that are shown on error are two different sets, so we shouldn't reuse757 // normal children even if their identities match.758 forceUnmountCurrentAndReconcile(759 current,760 workInProgress,761 nextChildren,762 renderExpirationTime,763 );764 } else {765 reconcileChildren(766 current,767 workInProgress,768 nextChildren,769 renderExpirationTime,770 );771 }772 // Memoize state using the values we just used to render.773 // TODO: Restructure so we never read values from the instance.774 workInProgress.memoizedState = instance.state;775 // The context might have changed so we need to recalculate it.776 if (hasContext) {777 invalidateContextProvider(workInProgress, Component, true);778 }779 return workInProgress.child;780}781function pushHostRootContext(workInProgress) {782 const root = (workInProgress.stateNode: FiberRoot);783 if (root.pendingContext) {784 pushTopLevelContextObject(785 workInProgress,786 root.pendingContext,787 root.pendingContext !== root.context,788 );789 } else if (root.context) {790 // Should always be set791 pushTopLevelContextObject(workInProgress, root.context, false);792 }793 pushHostContainer(workInProgress, root.containerInfo);794}795function updateHostRoot(796 current, // FiberNode797 workInProgress, // éåFiberNode798 renderExpirationTime, // Sync799) {800 pushHostRootContext(workInProgress);801 const updateQueue = workInProgress.updateQueue;802 invariant(803 updateQueue !== null,804 'If the root does not have an updateQueue, we should have already ' +805 'bailed out. This error is likely caused by a bug in React. Please ' +806 'file an issue.',807 );808 const nextProps = workInProgress.pendingProps;809 const prevState = workInProgress.memoizedState;810 const prevChildren = prevState !== null ? prevState.element : null;811 processUpdateQueue(812 workInProgress,813 updateQueue,814 nextProps,815 null,816 renderExpirationTime,817 );818 const nextState = workInProgress.memoizedState; // å¼ä¸º{ element: "hello" }819 // Caution: React DevTools currently depends on this property820 // being called "element".821 const nextChildren = nextState.element; // 'hello'822 if (nextChildren === prevChildren) { // prevChildren = null823 // If the state is the same as before, that's a bailout because we had824 // no work that expires at this time.825 resetHydrationState();826 return bailoutOnAlreadyFinishedWork(827 current,828 workInProgress,829 renderExpirationTime,830 );831 }832 const root: FiberRoot = workInProgress.stateNode; // æåFiberRoot833 if (834 (current === null || current.child === null) &&835 root.hydrate &&836 enterHydrationState(workInProgress)837 ) {838 // If we don't have any current children this might be the first pass.839 // We always try to hydrate. If this isn't a hydration pass there won't840 // be any children to hydrate which is effectively the same thing as841 // not hydrating.842 // This is a bit of a hack. We track the host root as a placement to843 // know that we're currently in a mounting state. That way isMounted844 // works as expected. We must reset this before committing.845 // TODO: Delete this when we delete isMounted and findDOMNode.846 workInProgress.effectTag |= Placement;847 // Ensure that children mount into this root without tracking848 // side-effects. This ensures that we don't store Placement effects on849 // nodes that will be hydrated.850 workInProgress.child = mountChildFibers(851 workInProgress,852 null,853 nextChildren,854 renderExpirationTime,855 );856 } else {857 // Otherwise reset hydration state in case we aborted and resumed another858 // root.859 reconcileChildren(860 current,861 workInProgress,862 nextChildren,863 renderExpirationTime,864 );865 resetHydrationState();866 }867 return workInProgress.child;868}869function updateHostComponent(current, workInProgress, renderExpirationTime) {870 pushHostContext(workInProgress);871 if (current === null) {872 tryToClaimNextHydratableInstance(workInProgress);873 }874 const type = workInProgress.type;875 const nextProps = workInProgress.pendingProps;876 const prevProps = current !== null ? current.memoizedProps : null;877 let nextChildren = nextProps.children;878 const isDirectTextChild = shouldSetTextContent(type, nextProps);879 if (isDirectTextChild) {880 // We special case a direct text child of a host node. This is a common881 // case. We won't handle it as a reified child. We will instead handle882 // this in the host environment that also have access to this prop. That883 // avoids allocating another HostText fiber and traversing it.884 nextChildren = null;885 } else if (prevProps !== null && shouldSetTextContent(type, prevProps)) {886 // If we're switching from a direct text child to a normal child, or to887 // empty, we need to schedule the text content to be reset.888 workInProgress.effectTag |= ContentReset;889 }890 markRef(current, workInProgress);891 // Check the host config to see if the children are offscreen/hidden.892 if (893 renderExpirationTime !== Never &&894 workInProgress.mode & ConcurrentMode &&895 shouldDeprioritizeSubtree(type, nextProps)896 ) {897 // Schedule this fiber to re-render at offscreen priority. Then bailout.898 workInProgress.expirationTime = workInProgress.childExpirationTime = Never;899 return null;900 }901 reconcileChildren(902 current,903 workInProgress,904 nextChildren,905 renderExpirationTime,906 );907 return workInProgress.child;908}909function updateHostText(current, workInProgress) {910 if (current === null) {911 tryToClaimNextHydratableInstance(workInProgress);912 }913 // Nothing to do here. This is terminal. We'll do the completion step914 // immediately after.915 return null;916}917function mountLazyComponent(918 _current,919 workInProgress,920 elementType,921 updateExpirationTime,922 renderExpirationTime,923) {924 if (_current !== null) {925 // An lazy component only mounts if it suspended inside a non-926 // concurrent tree, in an inconsistent state. We want to treat it like927 // a new mount, even though an empty version of it already committed.928 // Disconnect the alternate pointers.929 _current.alternate = null;930 workInProgress.alternate = null;931 // Since this is conceptually a new fiber, schedule a Placement effect932 workInProgress.effectTag |= Placement;933 }934 const props = workInProgress.pendingProps;935 // We can't start a User Timing measurement with correct label yet.936 // Cancel and resume right after we know the tag.937 cancelWorkTimer(workInProgress);938 let Component = readLazyComponentType(elementType);939 // Store the unwrapped component in the type.940 workInProgress.type = Component;941 const resolvedTag = (workInProgress.tag = resolveLazyComponentTag(Component));942 startWorkTimer(workInProgress);943 const resolvedProps = resolveDefaultProps(Component, props);944 let child;945 switch (resolvedTag) {946 case FunctionComponent: {947 if (__DEV__) {948 validateFunctionComponentInDev(workInProgress, Component);949 }950 child = updateFunctionComponent(951 null,952 workInProgress,953 Component,954 resolvedProps,955 renderExpirationTime,956 );957 break;958 }959 case ClassComponent: {960 child = updateClassComponent(961 null,962 workInProgress,963 Component,964 resolvedProps,965 renderExpirationTime,966 );967 break;968 }969 case ForwardRef: {970 child = updateForwardRef(971 null,972 workInProgress,973 Component,974 resolvedProps,975 renderExpirationTime,976 );977 break;978 }979 case MemoComponent: {980 if (__DEV__) {981 if (workInProgress.type !== workInProgress.elementType) {982 const outerPropTypes = Component.propTypes;983 if (outerPropTypes) {984 checkPropTypes(985 outerPropTypes,986 resolvedProps, // Resolved for outer only987 'prop',988 getComponentName(Component),989 getCurrentFiberStackInDev,990 );991 }992 }993 }994 child = updateMemoComponent(995 null,996 workInProgress,997 Component,998 resolveDefaultProps(Component.type, resolvedProps), // The inner type can have defaults too999 updateExpirationTime,1000 renderExpirationTime,1001 );1002 break;1003 }1004 default: {1005 let hint = '';1006 if (__DEV__) {1007 if (1008 Component !== null &&1009 typeof Component === 'object' &&1010 Component.$$typeof === REACT_LAZY_TYPE1011 ) {1012 hint = ' Did you wrap a component in React.lazy() more than once?';1013 }1014 }1015 // This message intentionally doesn't mention ForwardRef or MemoComponent1016 // because the fact that it's a separate type of work is an1017 // implementation detail.1018 invariant(1019 false,1020 'Element type is invalid. Received a promise that resolves to: %s. ' +1021 'Lazy element type must resolve to a class or function.%s',1022 Component,1023 hint,1024 );1025 }1026 }1027 return child;1028}1029function mountIncompleteClassComponent(1030 _current,1031 workInProgress,1032 Component,1033 nextProps,1034 renderExpirationTime,1035) {1036 if (_current !== null) {1037 // An incomplete component only mounts if it suspended inside a non-1038 // concurrent tree, in an inconsistent state. We want to treat it like1039 // a new mount, even though an empty version of it already committed.1040 // Disconnect the alternate pointers.1041 _current.alternate = null;1042 workInProgress.alternate = null;1043 // Since this is conceptually a new fiber, schedule a Placement effect1044 workInProgress.effectTag |= Placement;1045 }1046 // Promote the fiber to a class and try rendering again.1047 workInProgress.tag = ClassComponent;1048 // The rest of this function is a fork of `updateClassComponent`1049 // Push context providers early to prevent context stack mismatches.1050 // During mounting we don't know the child context yet as the instance doesn't exist.1051 // We will invalidate the child context in finishClassComponent() right after rendering.1052 let hasContext;1053 if (isLegacyContextProvider(Component)) {1054 hasContext = true;1055 pushLegacyContextProvider(workInProgress);1056 } else {1057 hasContext = false;1058 }1059 prepareToReadContext(workInProgress, renderExpirationTime);1060 constructClassInstance(1061 workInProgress,1062 Component,1063 nextProps,1064 renderExpirationTime,1065 );1066 mountClassInstance(1067 workInProgress,1068 Component,1069 nextProps,1070 renderExpirationTime,1071 );1072 return finishClassComponent(1073 null,1074 workInProgress,1075 Component,1076 true,1077 hasContext,1078 renderExpirationTime,1079 );1080}1081function mountIndeterminateComponent(1082 _current,1083 workInProgress,1084 Component,1085 renderExpirationTime,1086) {1087 if (_current !== null) {1088 // An indeterminate component only mounts if it suspended inside a non-1089 // concurrent tree, in an inconsistent state. We want to treat it like1090 // a new mount, even though an empty version of it already committed.1091 // Disconnect the alternate pointers.1092 _current.alternate = null;1093 workInProgress.alternate = null;1094 // Since this is conceptually a new fiber, schedule a Placement effect1095 workInProgress.effectTag |= Placement;1096 }1097 const props = workInProgress.pendingProps;1098 const unmaskedContext = getUnmaskedContext(workInProgress, Component, false);1099 const context = getMaskedContext(workInProgress, unmaskedContext);1100 prepareToReadContext(workInProgress, renderExpirationTime);1101 let value;1102 if (__DEV__) {1103 if (1104 Component.prototype &&1105 typeof Component.prototype.render === 'function'1106 ) {1107 const componentName = getComponentName(Component) || 'Unknown';1108 if (!didWarnAboutBadClass[componentName]) {1109 warningWithoutStack(1110 false,1111 "The <%s /> component appears to have a render method, but doesn't extend React.Component. " +1112 'This is likely to cause errors. Change %s to extend React.Component instead.',1113 componentName,1114 componentName,1115 );1116 didWarnAboutBadClass[componentName] = true;1117 }1118 }1119 if (workInProgress.mode & StrictMode) {1120 ReactStrictModeWarnings.recordLegacyContextWarning(workInProgress, null);1121 }1122 ReactCurrentOwner.current = workInProgress;1123 value = renderWithHooks(1124 null,1125 workInProgress,1126 Component,1127 props,1128 context,1129 renderExpirationTime,1130 );1131 } else {1132 value = renderWithHooks(1133 null,1134 workInProgress,1135 Component,1136 props,1137 context,1138 renderExpirationTime,1139 );1140 }1141 // React DevTools reads this flag.1142 workInProgress.effectTag |= PerformedWork;1143 if (1144 typeof value === 'object' &&1145 value !== null &&1146 typeof value.render === 'function' &&1147 value.$$typeof === undefined1148 ) {1149 // Proceed under the assumption that this is a class instance1150 workInProgress.tag = ClassComponent;1151 // Throw out any hooks that were used.1152 resetHooks();1153 // Push context providers early to prevent context stack mismatches.1154 // During mounting we don't know the child context yet as the instance doesn't exist.1155 // We will invalidate the child context in finishClassComponent() right after rendering.1156 let hasContext = false;1157 if (isLegacyContextProvider(Component)) {1158 hasContext = true;1159 pushLegacyContextProvider(workInProgress);1160 } else {1161 hasContext = false;1162 }1163 workInProgress.memoizedState =1164 value.state !== null && value.state !== undefined ? value.state : null;1165 const getDerivedStateFromProps = Component.getDerivedStateFromProps;1166 if (typeof getDerivedStateFromProps === 'function') {1167 applyDerivedStateFromProps(1168 workInProgress,1169 Component,1170 getDerivedStateFromProps,1171 props,1172 );1173 }1174 adoptClassInstance(workInProgress, value);1175 mountClassInstance(workInProgress, Component, props, renderExpirationTime);1176 return finishClassComponent(1177 null,1178 workInProgress,1179 Component,1180 true,1181 hasContext,1182 renderExpirationTime,1183 );1184 } else {1185 // Proceed under the assumption that this is a function component1186 workInProgress.tag = FunctionComponent;1187 if (__DEV__) {1188 if (1189 debugRenderPhaseSideEffects ||1190 (debugRenderPhaseSideEffectsForStrictMode &&1191 workInProgress.mode & StrictMode)1192 ) {1193 // Only double-render components with Hooks1194 if (workInProgress.memoizedState !== null) {1195 value = renderWithHooks(1196 null,1197 workInProgress,1198 Component,1199 props,1200 context,1201 renderExpirationTime,1202 );1203 }1204 }1205 }1206 reconcileChildren(null, workInProgress, value, renderExpirationTime);1207 if (__DEV__) {1208 validateFunctionComponentInDev(workInProgress, Component);1209 }1210 return workInProgress.child;1211 }1212}1213function validateFunctionComponentInDev(workInProgress: Fiber, Component: any) {1214 if (Component) {1215 warningWithoutStack(1216 !Component.childContextTypes,1217 '%s(...): childContextTypes cannot be defined on a function component.',1218 Component.displayName || Component.name || 'Component',1219 );1220 }1221 if (workInProgress.ref !== null) {1222 let info = '';1223 const ownerName = getCurrentFiberOwnerNameInDevOrNull();1224 if (ownerName) {1225 info += '\n\nCheck the render method of `' + ownerName + '`.';1226 }1227 let warningKey = ownerName || workInProgress._debugID || '';...
Using AI Code Generation
1const { validateFunctionComponentInDev } = require('playwright-core/lib/server/frames');2const { validateFunctionComponentInDev } = require('playwright-core/lib/server/frames');3const { validateFunctionComponentInDev } = require('playwright-core/lib/server/frames');4const { validateFunctionComponentInDev } = require('playwright-core/lib/server/frames');5const { validateFunctionComponentInDev } = require('playwright-core/lib/server/frames');6const { validateFunctionComponentInDev } = require('playwright-core/lib/server/frames');7const { validateFunctionComponentInDev } = require('playwright-core/lib/server/frames');8const { validateFunctionComponentInDev } = require('playwright-core/lib/server/frames');9const { validateFunctionComponentInDev } = require('playwright-core/lib/server/frames');10const { validateFunctionComponentInDev } = require('playwright-core/lib/server/frames');11const { validateFunctionComponentInDev } = require('playwright-core/lib/server/frames');12const { validateFunctionComponentInDev } = require('playwright-core/lib/server/frames');13const { validateFunctionComponentInDev } = require('playwright-core/lib/server/frames');14const { validateFunctionComponentInDev } = require('playwright-core/lib/server/frames');15const { validateFunctionComponentInDev
Using AI Code Generation
1const { validateFunctionComponentInDev } = require(‘@playwright/test/lib/utils/validateFunctionComponentInDev’);2validateFunctionComponentInDev(‘MyComponent’, MyComponent);3const { test } = require(‘@playwright/test’);4test(‘MyComponent test’, async ({ page }) => {5 await page.setContent(‘<MyComponent />’);6 await page.waitForSelector(‘text=MyComponent’);7});
Using AI Code Generation
1const { validateFunctionComponentInDev } = require('playwright-core/lib/server/supplements/recorder/recorderSupplement.js');2const code = `function Test() {3 return (4 );5}6`;7const ast = parse(code);8const result = validateFunctionComponentInDev(ast);9console.log(result);10{ type: 'FunctionComponent', name: 'Test' }
Using AI Code Generation
1const { validateFunctionComponentInDev } = require('playwright/lib/internalAPIs');2const { expect } = require('chai');3describe('Test', () => {4 it('should be able to validate function component', async () => {5 const result = await validateFunctionComponentInDev(ReactComponent);6 expect(result).to.be.true;7 });8});
Using AI Code Generation
1const { validateFunctionComponentInDev } = require('playwright/lib/server/supplements/utils/validateFunctionComponent');2validateFunctionComponentInDev(() => {3});4const { validateFunctionComponentInDev } = require('playwright/lib/server/supplements/utils/validateFunctionComponent');5validateFunctionComponentInDev(() => {6});7const { validateFunctionComponentInDev } = require('playwright/lib/server/supplements/utils/validateFunctionComponent');8validateFunctionComponentInDev(() => {9});10const { validateFunctionComponentInDev } = require('playwright/lib/server/supplements/utils/validateFunctionComponent');11validateFunctionComponentInDev(() => {12});13const { validateFunctionComponentInDev } = require('playwright/lib/server/supplements/utils/validateFunctionComponent');14validateFunctionComponentInDev(() => {15});16const { validateFunctionComponentInDev } = require('playwright/lib/server/supplements/utils/validateFunctionComponent');17validateFunctionComponentInDev(() => {18});19const { validateFunctionComponentInDev } = require('playwright/lib/server/supplements/utils/validateFunctionComponent');20validateFunctionComponentInDev(() => {21});22const { validateFunctionComponentInDev } = require('playwright/lib/server/supplements/utils/validateFunctionComponent');23validateFunctionComponentInDev(() => {24});25const { validateFunctionComponentInDev } = require('playwright/lib/server/supplements/utils/validateFunctionComponent');26validateFunctionComponentInDev(() => {27});28const { validateFunctionComponentInDev } = require('playwright/lib/server/supplements/utils/validateFunctionComponent');29validateFunctionComponentInDev(() => {30});31const { validateFunctionComponentInDev } = require('playwright/lib/server/supplements/utils/validateFunctionComponent');32validateFunctionComponentInDev(() => {33});
Using AI Code Generation
1const { validateFunctionComponentInDev } = require('playwright/lib/server/validateFunctionComponent');2validateFunctionComponentInDev(function() {3});4{ valid: true }5const { validateFunctionComponentInDev } = require('playwright/lib/server/validateFunctionComponent');6validateFunctionComponentInDev(function() {7});8{ valid: false, error: 'Invalid component' }
LambdaTest’s Playwright tutorial will give you a broader idea about the Playwright automation framework, its unique features, and use cases with examples to exceed your understanding of Playwright testing. This tutorial will give A to Z guidance, from installing the Playwright framework to some best practices and advanced concepts.
Get 100 minutes of automation test minutes FREE!!