Commit 86b3e24
authored
Implement useSyncExternalStore on server (#22347)
Adds a third argument called `getServerSnapshot`.
On the server, React calls this one instead of the normal `getSnapshot`.
We also call it during hydration.
So it represents the snapshot that is used to generate the initial,
server-rendered HTML. The purpose is to avoid server-client mismatches.
What we render during hydration needs to match up exactly with what we
render on the server.
The pattern is for the server to send down a serialized copy of the
store that was used to generate the initial HTML. On the client, React
will call either `getSnapshot` or `getServerSnapshot` on the client as
appropriate, depending on whether it's currently hydrating.
The argument is optional for fully client rendered use cases. If the
user does attempt to omit `getServerSnapshot`, and the hook is called
on the server, React will abort that subtree on the server and
revert to client rendering, up to the nearest Suspense boundary.
For the userspace shim, we will need to use a heuristic (canUseDOM)
to determine whether we are in a server environment. I'll do that in
a follow up.1 parent 57e4d68 commit 86b3e24
File tree
12 files changed
+341
-71
lines changed- packages
- react-debug-tools/src
- react-dom/src
- __tests__
- server
- react-reconciler/src
- react-server/src
- react/src
- use-sync-external-store/src
- __tests__
- scripts/error-codes
12 files changed
+341
-71
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
258 | 258 | | |
259 | 259 | | |
260 | 260 | | |
| 261 | + | |
261 | 262 | | |
262 | 263 | | |
263 | 264 | | |
| |||
Lines changed: 157 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
17 | 17 | | |
18 | 18 | | |
19 | 19 | | |
| 20 | + | |
| 21 | + | |
20 | 22 | | |
21 | 23 | | |
22 | 24 | | |
| |||
39 | 41 | | |
40 | 42 | | |
41 | 43 | | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
42 | 47 | | |
43 | 48 | | |
44 | 49 | | |
| |||
1478 | 1483 | | |
1479 | 1484 | | |
1480 | 1485 | | |
| 1486 | + | |
| 1487 | + | |
| 1488 | + | |
| 1489 | + | |
| 1490 | + | |
| 1491 | + | |
| 1492 | + | |
| 1493 | + | |
| 1494 | + | |
| 1495 | + | |
| 1496 | + | |
| 1497 | + | |
| 1498 | + | |
| 1499 | + | |
| 1500 | + | |
| 1501 | + | |
| 1502 | + | |
| 1503 | + | |
| 1504 | + | |
| 1505 | + | |
| 1506 | + | |
| 1507 | + | |
| 1508 | + | |
| 1509 | + | |
| 1510 | + | |
| 1511 | + | |
| 1512 | + | |
| 1513 | + | |
| 1514 | + | |
| 1515 | + | |
| 1516 | + | |
| 1517 | + | |
| 1518 | + | |
| 1519 | + | |
| 1520 | + | |
| 1521 | + | |
| 1522 | + | |
| 1523 | + | |
| 1524 | + | |
| 1525 | + | |
| 1526 | + | |
| 1527 | + | |
| 1528 | + | |
| 1529 | + | |
| 1530 | + | |
| 1531 | + | |
| 1532 | + | |
| 1533 | + | |
| 1534 | + | |
| 1535 | + | |
| 1536 | + | |
| 1537 | + | |
| 1538 | + | |
| 1539 | + | |
| 1540 | + | |
| 1541 | + | |
| 1542 | + | |
| 1543 | + | |
| 1544 | + | |
| 1545 | + | |
| 1546 | + | |
| 1547 | + | |
| 1548 | + | |
| 1549 | + | |
| 1550 | + | |
| 1551 | + | |
| 1552 | + | |
| 1553 | + | |
| 1554 | + | |
| 1555 | + | |
| 1556 | + | |
| 1557 | + | |
| 1558 | + | |
| 1559 | + | |
| 1560 | + | |
| 1561 | + | |
| 1562 | + | |
| 1563 | + | |
| 1564 | + | |
| 1565 | + | |
| 1566 | + | |
| 1567 | + | |
| 1568 | + | |
| 1569 | + | |
| 1570 | + | |
| 1571 | + | |
| 1572 | + | |
| 1573 | + | |
| 1574 | + | |
| 1575 | + | |
| 1576 | + | |
| 1577 | + | |
| 1578 | + | |
| 1579 | + | |
| 1580 | + | |
| 1581 | + | |
| 1582 | + | |
| 1583 | + | |
| 1584 | + | |
| 1585 | + | |
| 1586 | + | |
| 1587 | + | |
| 1588 | + | |
| 1589 | + | |
| 1590 | + | |
| 1591 | + | |
| 1592 | + | |
| 1593 | + | |
| 1594 | + | |
| 1595 | + | |
| 1596 | + | |
| 1597 | + | |
| 1598 | + | |
| 1599 | + | |
| 1600 | + | |
| 1601 | + | |
| 1602 | + | |
| 1603 | + | |
| 1604 | + | |
| 1605 | + | |
| 1606 | + | |
| 1607 | + | |
| 1608 | + | |
| 1609 | + | |
| 1610 | + | |
| 1611 | + | |
| 1612 | + | |
| 1613 | + | |
| 1614 | + | |
| 1615 | + | |
| 1616 | + | |
| 1617 | + | |
| 1618 | + | |
| 1619 | + | |
| 1620 | + | |
| 1621 | + | |
| 1622 | + | |
| 1623 | + | |
| 1624 | + | |
| 1625 | + | |
| 1626 | + | |
| 1627 | + | |
| 1628 | + | |
| 1629 | + | |
| 1630 | + | |
| 1631 | + | |
| 1632 | + | |
| 1633 | + | |
| 1634 | + | |
| 1635 | + | |
| 1636 | + | |
| 1637 | + | |
1481 | 1638 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
464 | 464 | | |
465 | 465 | | |
466 | 466 | | |
| 467 | + | |
467 | 468 | | |
468 | | - | |
| 469 | + | |
| 470 | + | |
| 471 | + | |
| 472 | + | |
| 473 | + | |
| 474 | + | |
| 475 | + | |
| 476 | + | |
469 | 477 | | |
470 | 478 | | |
471 | 479 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
938 | 938 | | |
939 | 939 | | |
940 | 940 | | |
| 941 | + | |
941 | 942 | | |
942 | 943 | | |
943 | 944 | | |
944 | | - | |
945 | | - | |
946 | | - | |
947 | | - | |
948 | | - | |
949 | | - | |
950 | | - | |
951 | | - | |
952 | | - | |
953 | | - | |
954 | | - | |
| 945 | + | |
| 946 | + | |
| 947 | + | |
| 948 | + | |
| 949 | + | |
| 950 | + | |
| 951 | + | |
| 952 | + | |
| 953 | + | |
| 954 | + | |
| 955 | + | |
| 956 | + | |
| 957 | + | |
| 958 | + | |
| 959 | + | |
| 960 | + | |
| 961 | + | |
| 962 | + | |
| 963 | + | |
| 964 | + | |
955 | 965 | | |
956 | 966 | | |
| 967 | + | |
| 968 | + | |
| 969 | + | |
| 970 | + | |
| 971 | + | |
| 972 | + | |
| 973 | + | |
| 974 | + | |
| 975 | + | |
| 976 | + | |
| 977 | + | |
| 978 | + | |
| 979 | + | |
| 980 | + | |
| 981 | + | |
| 982 | + | |
| 983 | + | |
| 984 | + | |
| 985 | + | |
| 986 | + | |
| 987 | + | |
| 988 | + | |
| 989 | + | |
| 990 | + | |
| 991 | + | |
| 992 | + | |
| 993 | + | |
957 | 994 | | |
| 995 | + | |
| 996 | + | |
| 997 | + | |
| 998 | + | |
958 | 999 | | |
959 | 1000 | | |
960 | 1001 | | |
| |||
980 | 1021 | | |
981 | 1022 | | |
982 | 1023 | | |
983 | | - | |
984 | | - | |
985 | | - | |
986 | | - | |
987 | | - | |
988 | | - | |
989 | | - | |
990 | | - | |
991 | | - | |
992 | | - | |
993 | | - | |
994 | | - | |
995 | 1024 | | |
996 | 1025 | | |
997 | 1026 | | |
998 | 1027 | | |
999 | 1028 | | |
1000 | 1029 | | |
| 1030 | + | |
1001 | 1031 | | |
1002 | 1032 | | |
1003 | 1033 | | |
| |||
2235 | 2265 | | |
2236 | 2266 | | |
2237 | 2267 | | |
| 2268 | + | |
2238 | 2269 | | |
2239 | 2270 | | |
2240 | 2271 | | |
2241 | | - | |
| 2272 | + | |
2242 | 2273 | | |
2243 | 2274 | | |
2244 | 2275 | | |
| |||
2366 | 2397 | | |
2367 | 2398 | | |
2368 | 2399 | | |
| 2400 | + | |
2369 | 2401 | | |
2370 | 2402 | | |
2371 | 2403 | | |
2372 | | - | |
| 2404 | + | |
2373 | 2405 | | |
2374 | 2406 | | |
2375 | 2407 | | |
| |||
2497 | 2529 | | |
2498 | 2530 | | |
2499 | 2531 | | |
| 2532 | + | |
2500 | 2533 | | |
2501 | 2534 | | |
2502 | 2535 | | |
2503 | | - | |
| 2536 | + | |
2504 | 2537 | | |
2505 | 2538 | | |
2506 | 2539 | | |
| |||
2629 | 2662 | | |
2630 | 2663 | | |
2631 | 2664 | | |
| 2665 | + | |
2632 | 2666 | | |
2633 | 2667 | | |
2634 | 2668 | | |
2635 | | - | |
| 2669 | + | |
2636 | 2670 | | |
2637 | 2671 | | |
2638 | 2672 | | |
| |||
2774 | 2808 | | |
2775 | 2809 | | |
2776 | 2810 | | |
| 2811 | + | |
2777 | 2812 | | |
2778 | 2813 | | |
2779 | 2814 | | |
2780 | 2815 | | |
2781 | | - | |
| 2816 | + | |
2782 | 2817 | | |
2783 | 2818 | | |
2784 | 2819 | | |
| |||
2921 | 2956 | | |
2922 | 2957 | | |
2923 | 2958 | | |
| 2959 | + | |
2924 | 2960 | | |
2925 | 2961 | | |
2926 | 2962 | | |
2927 | 2963 | | |
2928 | | - | |
| 2964 | + | |
2929 | 2965 | | |
2930 | 2966 | | |
2931 | 2967 | | |
| |||
3069 | 3105 | | |
3070 | 3106 | | |
3071 | 3107 | | |
| 3108 | + | |
3072 | 3109 | | |
3073 | 3110 | | |
3074 | 3111 | | |
3075 | 3112 | | |
3076 | | - | |
| 3113 | + | |
3077 | 3114 | | |
3078 | 3115 | | |
3079 | 3116 | | |
| |||
0 commit comments