@samitouri / QOS-React / commits / 1b388366c1

Inherit contextTag from the parent on creation

A fiber has all the context flags of its parent. It may also add additional ones during construction/mount. After mounting, contextTag shouldn't change.

Andrew Clark committed Apr 14, 2017 at 17:06 UTC 1b388366c197516a2508a573146221fd126ff66a
1 file changed +17
src/renderers/shared/fiber/ReactChildFiber.js
+17
@@ -307,6 +307,7 @@ function ChildReconciler(shouldClone, shouldTrackSideEffects) {
307 // Insert
308 const created = createFiberFromText(textContent, priority);
309 created.return = returnFiber;
310 + created.contextTag = returnFiber.contextTag;
311 return created;
312 } else {
313 // Update
@@ -328,6 +329,7 @@ function ChildReconciler(shouldClone, shouldTrackSideEffects) {
329 const created = createFiberFromElement(element, priority);
330 created.ref = coerceRef(current, element);
331 created.return = returnFiber;
332 + created.contextTag = returnFiber.contextTag;
333 return created;
334 } else {
335 // Move based on index
@@ -354,6 +356,7 @@ function ChildReconciler(shouldClone, shouldTrackSideEffects) {
356 // Insert
357 const created = createFiberFromCoroutine(coroutine, priority);
358 created.return = returnFiber;
359 + created.contextTag = returnFiber.contextTag;
360 return created;
361 } else {
362 // Move based on index
@@ -375,6 +378,7 @@ function ChildReconciler(shouldClone, shouldTrackSideEffects) {
378 const created = createFiberFromYield(yieldNode, priority);
379 created.type = yieldNode.value;
380 created.return = returnFiber;
381 + created.contextTag = returnFiber.contextTag;
382 return created;
383 } else {
384 // Move based on index
@@ -400,6 +404,7 @@ function ChildReconciler(shouldClone, shouldTrackSideEffects) {
404 // Insert
405 const created = createFiberFromPortal(portal, priority);
406 created.return = returnFiber;
407 + created.contextTag = returnFiber.contextTag;
408 return created;
409 } else {
410 // Update
@@ -420,6 +425,7 @@ function ChildReconciler(shouldClone, shouldTrackSideEffects) {
425 // Insert
426 const created = createFiberFromFragment(fragment, priority);
427 created.return = returnFiber;
428 + created.contextTag = returnFiber.contextTag;
429 return created;
430 } else {
431 // Update
@@ -441,6 +447,7 @@ function ChildReconciler(shouldClone, shouldTrackSideEffects) {
447 // node.
448 const created = createFiberFromText('' + newChild, priority);
449 created.return = returnFiber;
450 + created.contextTag = returnFiber.contextTag;
451 return created;
452 }
453
@@ -450,12 +457,14 @@ function ChildReconciler(shouldClone, shouldTrackSideEffects) {
457 const created = createFiberFromElement(newChild, priority);
458 created.ref = coerceRef(null, newChild);
459 created.return = returnFiber;
460 + created.contextTag = returnFiber.contextTag;
461 return created;
462 }
463
464 case REACT_COROUTINE_TYPE: {
465 const created = createFiberFromCoroutine(newChild, priority);
466 created.return = returnFiber;
467 + created.contextTag = returnFiber.contextTag;
468 return created;
469 }
470
@@ -463,12 +472,14 @@ function ChildReconciler(shouldClone, shouldTrackSideEffects) {
472 const created = createFiberFromYield(newChild, priority);
473 created.type = newChild.value;
474 created.return = returnFiber;
475 + created.contextTag = returnFiber.contextTag;
476 return created;
477 }
478
479 case REACT_PORTAL_TYPE: {
480 const created = createFiberFromPortal(newChild, priority);
481 created.return = returnFiber;
482 + created.contextTag = returnFiber.contextTag;
483 return created;
484 }
485 }
@@ -476,6 +487,7 @@ function ChildReconciler(shouldClone, shouldTrackSideEffects) {
487 if (isArray(newChild) || getIteratorFn(newChild)) {
488 const created = createFiberFromFragment(newChild, priority);
489 created.return = returnFiber;
490 + created.contextTag = returnFiber.contextTag;
491 return created;
492 }
493
@@ -1013,6 +1025,7 @@ function ChildReconciler(shouldClone, shouldTrackSideEffects) {
1025 deleteRemainingChildren(returnFiber, currentFirstChild);
1026 const created = createFiberFromText(textContent, priority);
1027 created.return = returnFiber;
1028 + created.contextTag = returnFiber.contextTag;
1029 return created;
1030 }
1031
@@ -1052,6 +1065,7 @@ function ChildReconciler(shouldClone, shouldTrackSideEffects) {
1065 const created = createFiberFromElement(element, priority);
1066 created.ref = coerceRef(currentFirstChild, element);
1067 created.return = returnFiber;
1068 + created.contextTag = returnFiber.contextTag;
1069 return created;
1070 }
1071
@@ -1085,6 +1099,7 @@ function ChildReconciler(shouldClone, shouldTrackSideEffects) {
1099
1100 const created = createFiberFromCoroutine(coroutine, priority);
1101 created.return = returnFiber;
1102 + created.contextTag = returnFiber.contextTag;
1103 return created;
1104 }
1105
@@ -1111,6 +1126,7 @@ function ChildReconciler(shouldClone, shouldTrackSideEffects) {
1126 const created = createFiberFromYield(yieldNode, priority);
1127 created.type = yieldNode.value;
1128 created.return = returnFiber;
1129 + created.contextTag = returnFiber.contextTag;
1130 return created;
1131 }
1132
@@ -1148,6 +1164,7 @@ function ChildReconciler(shouldClone, shouldTrackSideEffects) {
1164
1165 const created = createFiberFromPortal(portal, priority);
1166 created.return = returnFiber;
1167 + created.contextTag = returnFiber.contextTag;
1168 return created;
1169 }
1170