SHARE
TWEET

Untitled

a guest Aug 26th, 2019 70 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function performWork(deadline) {
  2.   if (!nextUnitOfWork) {
  3.     // on initial render
  4.     // or if all work is complete and the nextUnitOfWork is null
  5.     //grab the first item on the workInProgress queue.
  6.     initialUnitOfWork();
  7.   }
  8.   loopThroughWork(deadline)
  9.   if (nextUnitOfWork || workQueue.length > 0) {
  10.     // if theres more work to be done. get to know when the browser will be occupied
  11.     // and check if we can perform some work with the timing provided.
  12.     requestIdleCallback(performWork);
  13.   }
  14. }
  15.  
  16. function initialUnitOfWork() {
  17.    //grab the first item in the array
  18.    // its a first come first serve scenario.
  19.    const update = workQueue.shift();
  20.  
  21.    // if there are no updates pending
  22.   // abort since there is no work to do.
  23.   if (!update) {
  24.     return;
  25.   }
  26.  
  27.   // this call will apply if the update came from setState
  28.   // we need the object passed in this.setState to the
  29.   // partialState of the current fiber
  30.   if (update.partialState) {
  31.     update.instance.__fiber.partialState = update.partialState;
  32.   }
  33.  
  34.   const root =
  35.     update.from === HOST_ROOT
  36.       ? update.dom._rootContainerFiber
  37.       : getRootNode(update.instance.__fiber);
  38.  
  39.   nextUnitOfWork = {
  40.     tag: HOST_ROOT,
  41.     stateNode: update.dom || root.stateNode, // the properties from the update are checked first for existence
  42.     props: update.newProps || root.props, // if the update properties are missing default back to the root properties
  43.     alternate: root
  44.   };
  45. }
  46.  
  47. function getRootNode(fiber) {
  48.   // climb up the fiber until we reach to the fiber with no parent
  49.   // This will give us the alternate property of each fiber if its not
  50.   // the host_root, meaning the fiber at the very top of the tree
  51.   let node = fiber;
  52.   while (node.parent) {
  53.     // as long as the current node has a parent keep climbing up
  54.     // until node.parent is null.
  55.     node = node.parent;
  56.   }
  57.   return node;
  58. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top