Skip to content

Commit e8dda1b

Browse files
authored
fix: avoid uneccesary re-renders on defer resolution (#9155)
* fix: avoid uneccesary re-renders on defer resolution * Add changeset
1 parent c398523 commit e8dda1b

File tree

3 files changed

+9
-10
lines changed

3 files changed

+9
-10
lines changed

.changeset/afraid-games-laugh.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@remix-run/router": patch
3+
---
4+
5+
fix: avoid uneccesary re-renders on defer resolution (#9155)

packages/react-router/__tests__/data-memory-router-test.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2392,7 +2392,7 @@ describe("<DataMemoryRouter>", () => {
23922392
`);
23932393

23942394
barValueDfd.resolve("LAZY");
2395-
await waitFor(() => !screen.getByText(/Loading.../));
2395+
await waitFor(() => screen.getByText(/oops is not defined/));
23962396
expect(getHtml(container)).toMatchInlineSnapshot(`
23972397
"<div>
23982398
<a
@@ -2466,7 +2466,7 @@ describe("<DataMemoryRouter>", () => {
24662466
`);
24672467

24682468
barValueDfd.resolve("LAZY");
2469-
await waitFor(() => !screen.getByText(/Loading.../));
2469+
await waitFor(() => screen.getByText(/oops is not defined/));
24702470
expect(getHtml(container)).toMatchInlineSnapshot(`
24712471
"<div>
24722472
<a

packages/router/router.ts

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1044,14 +1044,8 @@ export function createRouter(init: RouterInit): Router {
10441044
// Wire up subscribers to update loaderData as promises settle
10451045
activeDeferreds.forEach((deferredData, routeId) => {
10461046
deferredData.subscribe((aborted) => {
1047-
if (!aborted) {
1048-
updateState({
1049-
loaderData: {
1050-
...state.loaderData,
1051-
[routeId]: deferredData.data,
1052-
},
1053-
});
1054-
}
1047+
// Note: No need to updateState here since the TrackedPromise on
1048+
// loaderData is stable across resolve/reject
10551049
// Remove this instance if we were aborted or if promises have settled
10561050
if (aborted || deferredData.done) {
10571051
activeDeferreds.delete(routeId);

0 commit comments

Comments
 (0)