React 源码 - Suspense

202 阅读1分钟

function mountTransition() 
var _mountState2 = mountState(false),
isPending = _mountState2[0],
setPending = _mountState2[1]; 
var start = startTransition.bind(null, setPending);



function startTransition(setPending, callback) {
    // 获取优先级
    var priorityLevel = getCurrentPriorityLevel();
    
    runWithPriority$1(priorityLevel < UserBlockingPriority$2 ? UserBlockingPriority$2 : priorityLevel, function () {
      // 会调用 dispatch 进行更新
      setPending(true);
    });
    
    runWithPriority$1(priorityLevel > NormalPriority$1 ? NormalPriority$1 : priorityLevel, function () {
      var prevTransition = ReactCurrentBatchConfig$1.transition;
      ReactCurrentBatchConfig$1.transition = 1;

      try {
        // 会调用 dispatch 进行更新
        setPending(false);
        callback();
      } finally {
        ReactCurrentBatchConfig$1.transition = prevTransition;
      }
    });
}