From a8703e65d818ad4d51e26d7b5826539cbd3e1c81 Mon Sep 17 00:00:00 2001 From: Andrew Clark Date: Thu, 17 Nov 2016 13:11:16 +0000 Subject: [PATCH] Switch over primary effect types only This avoids the need to create an export for every combination of bits. --- .../shared/fiber/ReactFiberScheduler.js | 43 ++++++------------- .../shared/fiber/ReactTypeOfSideEffect.js | 17 +------- 2 files changed, 13 insertions(+), 47 deletions(-) diff --git a/src/renderers/shared/fiber/ReactFiberScheduler.js b/src/renderers/shared/fiber/ReactFiberScheduler.js index d3e0c976c2875..272ebe09f91b2 100644 --- a/src/renderers/shared/fiber/ReactFiberScheduler.js +++ b/src/renderers/shared/fiber/ReactFiberScheduler.js @@ -41,19 +41,7 @@ var { PlacementAndUpdate, Deletion, Callback, - PlacementAndCallback, - UpdateAndCallback, - PlacementAndUpdateAndCallback, - DeletionAndCallback, Err, - PlacementAndErr, - UpdateAndErr, - PlacementAndUpdateAndErr, - DeletionAndErr, - PlacementAndCallbackAndErr, - UpdateAndCallbackAndErr, - PlacementAndUpdateAndCallbackAndErr, - DeletionAndCallbackAndErr, } = require('ReactTypeOfSideEffect'); var { @@ -173,44 +161,37 @@ module.exports = function(config : HostConfig) { // ref unmounts. let effectfulFiber = finishedWork.firstEffect; while (effectfulFiber) { - switch (effectfulFiber.effectTag) { - case Placement: - case PlacementAndCallback: - case PlacementAndErr: - case PlacementAndCallbackAndErr: { + // The following switch statement is only concerned about placement, + // updates, and deletions. To avoid needing to add a case for every + // possible bitmap value, we remove the secondary effects from the + // effect tag and switch on that value. + let primaryEffectTag = effectfulFiber.effectTag & ~(Callback | Err); + switch (primaryEffectTag) { + case Placement: { commitInsertion(effectfulFiber); // Clear the "placement" from effect tag so that we know that this is inserted, before // any life-cycles like componentDidMount gets called. - effectfulFiber.effectTag ^= Placement; + effectfulFiber.effectTag &= ~Placement; break; } - case PlacementAndUpdate: - case PlacementAndUpdateAndCallback: - case PlacementAndUpdateAndErr: - case PlacementAndUpdateAndCallbackAndErr: { + case PlacementAndUpdate: { // Placement commitInsertion(effectfulFiber); // Clear the "placement" from effect tag so that we know that this is inserted, before // any life-cycles like componentDidMount gets called. - effectfulFiber.effectTag ^= Placement; + effectfulFiber.effectTag &= ~Placement; // Update const current = effectfulFiber.alternate; commitWork(current, effectfulFiber); break; } - case Update: - case UpdateAndErr: - case UpdateAndCallback: - case UpdateAndCallbackAndErr: { + case Update: { const current = effectfulFiber.alternate; commitWork(current, effectfulFiber); break; } - case Deletion: - case DeletionAndCallback: - case DeletionAndErr: - case DeletionAndCallbackAndErr: { + case Deletion: { commitDeletion(effectfulFiber); break; } diff --git a/src/renderers/shared/fiber/ReactTypeOfSideEffect.js b/src/renderers/shared/fiber/ReactTypeOfSideEffect.js index 0fe4b468918fc..f8dc19407c8d3 100644 --- a/src/renderers/shared/fiber/ReactTypeOfSideEffect.js +++ b/src/renderers/shared/fiber/ReactTypeOfSideEffect.js @@ -12,9 +12,7 @@ 'use strict'; -export type TypeOfSideEffect = - 0 | 1 | 2 | 3 | 4 | 8 | 9 | 10 | 11 | 12 | 16 | 17 | 18 | 19 | 20 | 24 | 25 | - 26 | 27 | 28; +export type TypeOfSideEffect = 0 | 1 | 2 | 3 | 4 | 8 | 16; module.exports = { NoEffect: 0, // 0b00000 @@ -23,18 +21,5 @@ module.exports = { PlacementAndUpdate: 3, // 0b00011 Deletion: 4, // 0b00100 Callback: 8, // 0b01000 - PlacementAndCallback: 9, // 0b01001 - UpdateAndCallback: 10, // 0b01010 - PlacementAndUpdateAndCallback: 11, // 0b01011 - DeletionAndCallback: 12, // 0b01100 Err: 16, // 0b10000 - PlacementAndErr: 17, // 0b10001 - UpdateAndErr: 18, // 0b10010 - PlacementAndUpdateAndErr: 19, // 0b10011 - DeletionAndErr: 20, // 0b10100 - CallbackAndErr: 24, // 0b11000 - PlacementAndCallbackAndErr: 25, // 0b11001 - UpdateAndCallbackAndErr: 26, // 0b11010 - PlacementAndUpdateAndCallbackAndErr: 27, // 0b11011 - DeletionAndCallbackAndErr: 28, // 0b11100 };