BlogReactReconcilerFiberRoot

React-reconciler | FiberRoot (19.0.0)

const root = ReactDOM.createRoot(document.getElementById('root'));를 통해 생성되는 Fiber 트리의 최상위입니다. FiberRoot를 통해 현재 화면에 렌더링된 트리(current)와 새로운 트리(alternate)를 관리합니다.

react/packages/react-reconciler/src/ReactInternalTypes.js
type BaseFiberRootProperties = {
  tag: RootTag,
  containerInfo: Container,
  pendingChildren: any,
  current: Fiber,
  pingCache: WeakMap<Wakeable, Set<mixed>> | Map<Wakeable, Set<mixed>> | null,
  finishedWork: Fiber | null,
  timeoutHandle: TimeoutHandle | NoTimeout,
  cancelPendingCommit: null | (() => void),
  context: Object | null,
  pendingContext: Object | null,
  next: FiberRoot | null,
  callbackNode: any,
  callbackPriority: Lane,
  expirationTimes: LaneMap<number>,
  hiddenUpdates: LaneMap<Array<ConcurrentUpdate> | null>,
  pendingLanes: Lanes,
  suspendedLanes: Lanes,
  pingedLanes: Lanes,
  warmLanes: Lanes,
  expiredLanes: Lanes,
  errorRecoveryDisabledLanes: Lanes,
  shellSuspendCounter: number,
  finishedLanes: Lanes,
  entangledLanes: Lanes,
  entanglements: LaneMap<Lanes>,
  pooledCache: Cache | null,
  pooledCacheLanes: Lanes,
  identifierPrefix: string,
  onUncaughtError: (
    error: mixed,
    errorInfo: {+componentStack?: ?string},
  ) => void,
  onCaughtError: (
    error: mixed,
    errorInfo: {
      +componentStack?: ?string,
      +errorBoundary?: ?React$Component<any, any>,
    },
  ) => void,
  onRecoverableError: (
    error: mixed,
    errorInfo: {+componentStack?: ?string},
  ) => void,
 
  formState: ReactFormState<any, any> | null,
};
 
type UpdaterTrackingOnlyFiberRootProperties = {
  memoizedUpdaters: Set<Fiber>,
  pendingUpdatersLaneMap: LaneMap<Set<Fiber>>,
};
 
export type SuspenseHydrationCallbacks = {
  onHydrated?: (suspenseInstance: SuspenseInstance) => void,
  onDeleted?: (suspenseInstance: SuspenseInstance) => void,
  ...
};
 
type SuspenseCallbackOnlyFiberRootProperties = {
  hydrationCallbacks: null | SuspenseHydrationCallbacks,
};
 
export type TransitionTracingCallbacks = {
  onTransitionStart?: (transitionName: string, startTime: number) => void,
  onTransitionProgress?: (
    transitionName: string,
    startTime: number,
    currentTime: number,
    pending: Array<{name: null | string}>,
  ) => void,
  onTransitionIncomplete?: (
    transitionName: string,
    startTime: number,
    deletions: Array<{
      type: string,
      name?: string | null,
      endTime: number,
    }>,
  ) => void,
  onTransitionComplete?: (
    transitionName: string,
    startTime: number,
    endTime: number,
  ) => void,
  onMarkerProgress?: (
    transitionName: string,
    marker: string,
    startTime: number,
    currentTime: number,
    pending: Array<{name: null | string}>,
  ) => void,
  onMarkerIncomplete?: (
    transitionName: string,
    marker: string,
    startTime: number,
    deletions: Array<{
      type: string,
      name?: string | null,
      endTime: number,
    }>,
  ) => void,
  onMarkerComplete?: (
    transitionName: string,
    marker: string,
    startTime: number,
    endTime: number,
  ) => void,
};
 
type TransitionTracingOnlyFiberRootProperties = {
  transitionCallbacks: null | TransitionTracingCallbacks,
  transitionLanes: Array<Set<Transition> | null>,
  incompleteTransitions: Map<Transition, TracingMarkerInstance>,
};
 
type ProfilerCommitHooksOnlyFiberRootProperties = {
  effectDuration: number,
  passiveEffectDuration: number,
};
 
export type FiberRoot = {
  ...BaseFiberRootProperties,
  ...SuspenseCallbackOnlyFiberRootProperties,
  ...UpdaterTrackingOnlyFiberRootProperties,
  ...TransitionTracingOnlyFiberRootProperties,
  ...ProfilerCommitHooksOnlyFiberRootProperties,
};

BaseFiberRootProperties

tag

react/packages/react-reconciler/src/ReactRootTags.js
export type RootTag = 0 | 1;
export const LegacyRoot = 0;
export const ConcurrentRoot = 1;
  • 레거시 동작인지 동시성 모드를 지원하는지 나타냅니다.

containerInfo

react/packages/react-dom-bindings/src/clients/ReactFiberConfigDOM.js
export type Container =
  | interface extends Element {_reactRootContainer?: FiberRoot}
  | interface extends Document {_reactRootContainer?: FiberRoot}
  | interface extends DocumentFragment {_reactRootContainer?: FiberRoot};
  • 렌더링될 DOM(document.getElementById('root'))에 대한 참조입니다.

pendingChildren

  • 아직 렌더링되지 않은 자식 요소를 저장합니다.

current

  • 현재 렌더링된 Fiber tree입니다.

pingCache

  • 비동기 작업(예: Suspense)을 관리하기 위한 캐시입니다.

finishedWork

react/packages/react-reconciler/src/ReactFiberWorkLoop.js
export function performWorkOnRoot(
  root: FiberRoot,
  lanes: Lanes,
  forceSync: boolean,
): void {
  ...
  const finishedWork: Fiber = (root.current.alternate: any);
  ...
}
  • 렌더링이 완료된 Fiber 트리입니다.

timeoutHandle

  • 특정 작업이 지연되었을 때 사용됩니다.

cancelPendingCommit

  • 진행 중인 커밋을 취소하는 함수입니다.

context

  • React Context의 현재 상태입니다.

pendingContext

  • 업데이트 대기 중인 React Context 상태입니다.

next

  • 다음으로 처리할 FiberRoot를 나타냅니다.

callbackNode

  • 우선순위가 높은 Node(예: 작업 스케줄링)입니다.

callbackPriority

  • 현재 콜백의 우선순위를 나타냅니다.

expirationTimes

  • 각 Lane(작업 단위)의 만료 시간을 저장합니다.

hiddenUpdates

  • 숨겨진 업데이트를 관리합니다.

pendingLanes

  • 처리 대기 중인 Lane 집합입니다.

suspendedLanes

  • (Suspense fallback)중단된 Lane 집합입니다.

pingedLanes

  • (Suspense children)활성화된 Lane 집합입니다.

warmLanes

  • 캐싱된 Lane 집합입니다.

expiredLanes

  • 만료된 Lane 집합입니다.

errorRecoveryDisabledLanes

  • 에러 복구가 비활성화된 Lane 집합입니다.

shellSuspendCounter

  • Suspense 쉘이 중단된 횟수를 추적합니다.

finishedLanes

  • 완료된 Lane 집합입니다.

entangledLanes

  • 얽혀 있는 Lane 집합입니다.

entanglements

  • Lane 간의 의존성을 추적합니다.

pooledCache

  • 재사용 가능한 캐시 객체입니다.

pooledCacheLanes

  • 캐싱된 Lane 집합입니다.

identifierPrefix

  • HTML 요소의 ID에 붙는 접두사입니다.

onUncaughtError

  • 처리되지 않은 에러가 발생했을 때 호출되는 콜백입니다.

onCaughtError

  • 에러가 경계(boundary) 내에서 처리되었을 때 호출되는 콜백입니다.

onRecoverableError

  • 복구 가능한 에러가 발생했을 때 호출되는 콜백입니다.

formState

  • React Forms의 상태를 추적합니다.

SuspenseCallbackOnlyFiberRootProperties

onHydrated

  • Suspense 인스턴스가 수화된 후 호출됩니다.

onDeleted

  • Suspense 인스턴스가 삭제된 후 호출됩니다.

UpdaterTrackingOnlyFiberRootProperties

memoizedUpdaters

  • 메모이제이션된 업데이트를 추적합니다.

pendingUpdatersLaneMap

  • 업데이트가 대기 중인 Fiber들의 Lane 맵입니다.

TransitionTracingOnlyFiberRootProperties

transitionCallbacks

  • 전환과 관련된 콜백을 저장합니다.

transitionLanes

  • 전환 작업이 할당된 Lane들을 저장합니다.

incompleteTransitions

  • 완료되지 않은 전환을 저장합니다.

ProfilerCommitHooksOnlyFiberRootProperties

effectDuration

  • 렌더링 사이클에서 실행된 모든 이펙트의 총 지속 시간입니다.

passiveEffectDuration

  • useEffect 실행 시간입니다.