ReactFiberReconciler

https://github.com/facebook/react/blob/master/packages/react-reconciler/src/ReactFiberReconciler.js#L412

createContainer
updateContainer
updateContainerAtExpirationTime
return {
    createContainer(
      containerInfo: C,
      isAsync: boolean,
      hydrate: boolean,
    ): OpaqueRoot {
      return createFiberRoot(containerInfo, isAsync, hydrate);
    },

    updateContainer(
      element: ReactNodeList,
      container: OpaqueRoot,
      parentComponent: ?React$Component<any, any>,
      callback: ?Function,
    ): ExpirationTime {
      const current = container.current;
      const currentTime = recalculateCurrentTime();
      const expirationTime = computeExpirationForFiber(current);
      return updateContainerAtExpirationTime(
        element,
        container,
        parentComponent,
        currentTime,
        expirationTime,
        callback,
      );
    },

    updateContainerAtExpirationTime(
      element,
      container,
      parentComponent,
      expirationTime,
      callback,
    ) {
      const currentTime = recalculateCurrentTime();
      return updateContainerAtExpirationTime(
        element,
        container,
        parentComponent,
        currentTime,
        expirationTime,
        callback,
      );
    },

    flushRoot,

    requestWork,

    computeUniqueAsyncExpiration,

    batchedUpdates,

    unbatchedUpdates,

    deferredUpdates,

    syncUpdates,

    interactiveUpdates,

    flushInteractiveUpdates,

    flushControlled,

    flushSync,

    getPublicRootInstance(
      container: OpaqueRoot,
    ): React$Component<any, any> | PI | null {
      const containerFiber = container.current;
      if (!containerFiber.child) {
        return null;
      }
      switch (containerFiber.child.tag) {
        case HostComponent:
          return getPublicInstance(containerFiber.child.stateNode);
        default:
          return containerFiber.child.stateNode;
      }
    },

    findHostInstance,

    findHostInstanceWithNoPortals(fiber: Fiber): PI | null {
      const hostFiber = findCurrentHostFiberWithNoPortals(fiber);
      if (hostFiber === null) {
        return null;
      }
      return hostFiber.stateNode;
    },

    injectIntoDevTools(devToolsConfig: DevToolsConfig<I, TI>): boolean {
      const {findFiberByHostInstance} = devToolsConfig;
      return ReactFiberDevToolsHook.injectInternals({
        ...devToolsConfig,
        findHostInstanceByFiber(fiber: Fiber): I | TI | null {
          return findHostInstance(fiber);
        },
        findFiberByHostInstance(instance: I | TI): Fiber | null {
          if (!findFiberByHostInstance) {
            // Might not be implemented by the renderer.
            return null;
          }
          return findFiberByHostInstance(instance);
        },
      });
    },
  };

updateContainerAtExpirationTime

https://github.com/facebook/react/blob/master/packages/react-reconciler/src/ReactFiberReconciler.js#L365

 function updateContainerAtExpirationTime(
    element: ReactNodeList,
    container: OpaqueRoot,
    parentComponent: ?React$Component<any, any>,
    currentTime: ExpirationTime,
    expirationTime: ExpirationTime,
    callback: ?Function,
  ) {
    // TODO: If this is a nested container, this won't be the root.
    const current = container.current;

    const context = getContextForSubtree(parentComponent);
    if (container.context === null) {
      container.context = context;
    } else {
      container.pendingContext = context;
    }

    return scheduleRootUpdate(
      current,
      element,
      currentTime,
      expirationTime,
      callback,
    );
  }

scheduleRootUpdate

https://github.com/facebook/react/blob/master/packages/react-reconciler/src/ReactFiberReconciler.js#L315

The function callsinsertUpdateIntoFiberand scheduleWork.

function scheduleRootUpdate(
    current: Fiber,
    element: ReactNodeList,
    currentTime: ExpirationTime,
    expirationTime: ExpirationTime,
    callback: ?Function,
  ) {

    callback = callback === undefined ? null : callback;

    const update = {
      expirationTime,
      partialState: {element},
      callback,
      isReplace: false,
      isForced: false,
      capturedValue: null,
      next: null,
    };

    insertUpdateIntoFiber(current, update);
    scheduleWork(current, expirationTime);

    return expirationTime;
  }

results matching ""

    No results matching ""