From 19d0295fba3c2161bac57963386b922deb2c2206 Mon Sep 17 00:00:00 2001 From: Ryan Carniato Date: Tue, 27 Aug 2024 14:09:47 -0700 Subject: [PATCH] fix stranded effects during hydration cancelation --- .changeset/late-goats-live.md | 5 +++++ packages/solid/src/reactive/signal.ts | 9 +++++---- packages/solid/src/render/hydration.ts | 1 + 3 files changed, 11 insertions(+), 4 deletions(-) create mode 100644 .changeset/late-goats-live.md diff --git a/.changeset/late-goats-live.md b/.changeset/late-goats-live.md new file mode 100644 index 000000000..7cdbc5bf2 --- /dev/null +++ b/.changeset/late-goats-live.md @@ -0,0 +1,5 @@ +--- +"solid-js": patch +--- + +fix stranded effects during hydration cancelation diff --git a/packages/solid/src/reactive/signal.ts b/packages/solid/src/reactive/signal.ts index 24e26cd91..b732d6609 100644 --- a/packages/solid/src/reactive/signal.ts +++ b/packages/solid/src/reactive/signal.ts @@ -1594,13 +1594,14 @@ function runUserEffects(queue: Computation[]) { sharedConfig.effects || (sharedConfig.effects = []); sharedConfig.effects.push(...queue.slice(0, userLength)); return; - } else if (sharedConfig.effects) { - queue = [...sharedConfig.effects, ...queue]; - userLength += sharedConfig.effects.length; - delete sharedConfig.effects; } setHydrateContext(); } + if (sharedConfig.effects && (sharedConfig.done || !sharedConfig.count)) { + queue = [...sharedConfig.effects, ...queue]; + userLength += sharedConfig.effects.length; + delete sharedConfig.effects; + } for (i = 0; i < userLength; i++) runTop(queue[i]); } diff --git a/packages/solid/src/render/hydration.ts b/packages/solid/src/render/hydration.ts index 1fce9b0a0..be47cc03a 100644 --- a/packages/solid/src/render/hydration.ts +++ b/packages/solid/src/render/hydration.ts @@ -19,6 +19,7 @@ type SharedConfig = { export const sharedConfig: SharedConfig = { context: undefined, registry: undefined, + effects: undefined, done: false, getContextId() { return getContextId(this.context!.count);