Skip to content

Commit f909c1c

Browse files
committed
fix #2228 - chained resources with initial values
1 parent f6164b6 commit f909c1c

File tree

2 files changed

+15
-1
lines changed

2 files changed

+15
-1
lines changed

.changeset/flat-paws-notice.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"solid-js": patch
3+
---
4+
5+
fix #2228 - chained resources with initial values

packages/solid/src/server/rendering.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -333,6 +333,7 @@ export type ResourceOptions<T> = undefined extends T
333333
};
334334

335335
const SuspenseContext = createContext<SuspenseContextType>();
336+
let resourceContext: any[] | null = null;
336337
export function createResource<T, S = true>(
337338
fetcher: ResourceFetcher<S, T>,
338339
options?: ResourceOptions<undefined>
@@ -386,6 +387,7 @@ export function createResource<T, S>(
386387
options.ssrLoadFrom !== "initial" &&
387388
sharedConfig.context!.async &&
388389
"data" in sharedConfig.context!.resources[id];
390+
if (!resolved && resourceContext) resourceContext.push(id);
389391
if (!resolved && read.loading) {
390392
const ctx = useContext(SuspenseContext);
391393
if (ctx) {
@@ -411,7 +413,14 @@ export function createResource<T, S>(
411413
value = ctx.resources[id].data;
412414
return;
413415
}
414-
const lookup = typeof source === "function" ? (source as () => S)() : source;
416+
let lookup;
417+
try {
418+
resourceContext = [];
419+
lookup = typeof source === "function" ? (source as () => S)() : source;
420+
if (resourceContext.length) return;
421+
} finally {
422+
resourceContext = null;
423+
}
415424
if (!p) {
416425
if (lookup == null || lookup === false) return;
417426
p = (fetcher as ResourceFetcher<S, T>)(lookup, { value });

0 commit comments

Comments
 (0)