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