Commit f73ef32
committed
Don't modify keyPath until right before recursive renderNode call (#27366)
Currently, if a component suspends, the keyPath has already been
modified to include the identity of the component itself; the path is
set before the component body is called (akin to the begin phase in
Fiber). An accidental consequence is that when the promise resolves and
component is retried, the identity gets appended to the keyPath again,
leading to a duplicate node in the path.
To address this, we should only modify contexts after any code that may
suspend. For maximum safety, this should occur as late as possible:
right before the recursive renderNode call, before the children are
rendered.
I did not add a test yet because there's no feature that currently
observes it, but I do have tests in my other WIP PR for useFormState:
#27321
DiffTrain build for commit d07921e.1 parent 6c133b6 commit f73ef32
7 files changed
Lines changed: 9 additions & 9 deletions
File tree
- compiled-rn/facebook-fbsource/xplat/js
- RKJSModules/vendor
- react-test-renderer/cjs
- react/cjs
- react-native-github/Libraries/Renderer
Lines changed: 1 addition & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
23994 | 23994 | | |
23995 | 23995 | | |
23996 | 23996 | | |
23997 | | - | |
| 23997 | + | |
23998 | 23998 | | |
23999 | 23999 | | |
24000 | 24000 | | |
| |||
Lines changed: 2 additions & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
8617 | 8617 | | |
8618 | 8618 | | |
8619 | 8619 | | |
8620 | | - | |
| 8620 | + | |
8621 | 8621 | | |
8622 | 8622 | | |
8623 | 8623 | | |
| |||
8648 | 8648 | | |
8649 | 8649 | | |
8650 | 8650 | | |
8651 | | - | |
| 8651 | + | |
8652 | 8652 | | |
8653 | 8653 | | |
8654 | 8654 | | |
| |||
Lines changed: 2 additions & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
9043 | 9043 | | |
9044 | 9044 | | |
9045 | 9045 | | |
9046 | | - | |
| 9046 | + | |
9047 | 9047 | | |
9048 | 9048 | | |
9049 | 9049 | | |
| |||
9074 | 9074 | | |
9075 | 9075 | | |
9076 | 9076 | | |
9077 | | - | |
| 9077 | + | |
9078 | 9078 | | |
9079 | 9079 | | |
9080 | 9080 | | |
| |||
Lines changed: 1 addition & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
27 | 27 | | |
28 | 28 | | |
29 | 29 | | |
30 | | - | |
| 30 | + | |
31 | 31 | | |
32 | 32 | | |
33 | 33 | | |
| |||
Lines changed: 1 addition & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
616 | 616 | | |
617 | 617 | | |
618 | 618 | | |
619 | | - | |
| 619 | + | |
Lines changed: 1 addition & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
619 | 619 | | |
620 | 620 | | |
621 | 621 | | |
622 | | - | |
| 622 | + | |
623 | 623 | | |
624 | 624 | | |
625 | 625 | | |
| |||
Lines changed: 1 addition & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | | - | |
| 1 | + | |
0 commit comments