Skip to content

Commit 5698fb7

Browse files
authored
fix: better handling of derived signals that have no dependencies (#10558)
* fix: better handling of derived signals that have no dependencies * fix: better handling of derived signals that have no dependencies
1 parent aef2453 commit 5698fb7

File tree

3 files changed

+28
-1
lines changed

3 files changed

+28
-1
lines changed

.changeset/witty-tomatoes-care.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"svelte": patch
3+
---
4+
5+
fix: better handling of derived signals that have no dependencies

packages/svelte/src/internal/client/runtime.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -824,7 +824,8 @@ function update_derived(signal, force_schedule) {
824824
destroy_references(signal);
825825
const value = execute_signal_fn(signal);
826826
updating_derived = previous_updating_derived;
827-
const status = current_skip_consumer || (signal.f & UNOWNED) !== 0 ? DIRTY : CLEAN;
827+
const status =
828+
(current_skip_consumer || (signal.f & UNOWNED) !== 0) && signal.d !== null ? DIRTY : CLEAN;
828829
set_signal_status(signal, status);
829830
const equals = /** @type {import('./types.js').EqualsFunctions} */ (signal.e);
830831
if (!equals(value, signal.v)) {

packages/svelte/tests/signals/test.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -263,6 +263,27 @@ describe('signals', () => {
263263
};
264264
});
265265

266+
let no_deps = $.derived(() => {
267+
return [];
268+
});
269+
270+
test('two effects with an unowned derived that has no depedencies', () => {
271+
const log: Array<Array<any>> = [];
272+
273+
$.render_effect(() => {
274+
log.push($.get(no_deps));
275+
});
276+
277+
$.render_effect(() => {
278+
log.push($.get(no_deps));
279+
});
280+
281+
return () => {
282+
$.flushSync();
283+
assert.deepEqual(log, [[], []]);
284+
};
285+
});
286+
266287
test('schedules rerun when writing to signal before reading it', (runes) => {
267288
if (!runes) return () => {};
268289

0 commit comments

Comments
 (0)