mirror of https://github.com/sveltejs/svelte
fix: ensure $inspect effects are fine-grain (#13199)
Don't fire effects that don't need to rerun. Fixes #13189pull/13217/head
parent
a7a477804e
commit
93f8329b1b
@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
'svelte': patch
|
||||||
|
---
|
||||||
|
|
||||||
|
fix: ensure $inspect effects are fine-grain
|
@ -0,0 +1,13 @@
|
|||||||
|
<script>
|
||||||
|
import {getContext} from 'svelte';
|
||||||
|
|
||||||
|
let { children, value} = $props();
|
||||||
|
|
||||||
|
let listContext = getContext('list');
|
||||||
|
|
||||||
|
let selected = $derived(listContext?.selectedValue === value);
|
||||||
|
|
||||||
|
$inspect(value, selected);
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div class:selected>{@render children()}</div>
|
@ -0,0 +1,17 @@
|
|||||||
|
<script>
|
||||||
|
import {setContext} from 'svelte';
|
||||||
|
|
||||||
|
let {children, selectedValue} = $props();
|
||||||
|
|
||||||
|
let listContext = $state({ selectedValue});
|
||||||
|
|
||||||
|
$effect(() => {
|
||||||
|
listContext.selectedValue = selectedValue;
|
||||||
|
});
|
||||||
|
|
||||||
|
setContext('list',listContext);
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div class="list">
|
||||||
|
{@render children()}
|
||||||
|
</div>
|
@ -0,0 +1,34 @@
|
|||||||
|
import { flushSync } from 'svelte';
|
||||||
|
import { test } from '../../test';
|
||||||
|
|
||||||
|
export default test({
|
||||||
|
compileOptions: {
|
||||||
|
dev: true
|
||||||
|
},
|
||||||
|
|
||||||
|
async test({ assert, target, logs }) {
|
||||||
|
const button = target.querySelector('button');
|
||||||
|
|
||||||
|
flushSync(() => {
|
||||||
|
button?.click();
|
||||||
|
});
|
||||||
|
|
||||||
|
assert.deepEqual(logs, [
|
||||||
|
'init',
|
||||||
|
'0',
|
||||||
|
true,
|
||||||
|
'init',
|
||||||
|
'1',
|
||||||
|
false,
|
||||||
|
'init',
|
||||||
|
'2',
|
||||||
|
false,
|
||||||
|
'update',
|
||||||
|
'0',
|
||||||
|
false,
|
||||||
|
'update',
|
||||||
|
'1',
|
||||||
|
true
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
});
|
@ -0,0 +1,18 @@
|
|||||||
|
<script>
|
||||||
|
import List from './List.svelte';
|
||||||
|
import Item from './Item.svelte';
|
||||||
|
|
||||||
|
let selectedIndex = $state(0);
|
||||||
|
let selectedValue = $derived(`${selectedIndex}`);
|
||||||
|
|
||||||
|
const changeSelection = () => {
|
||||||
|
selectedIndex = (selectedIndex + 1)%3;
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<List {selectedValue}>
|
||||||
|
<Item value="0">First</Item>
|
||||||
|
<Item value="1">Second</Item>
|
||||||
|
<Item value="2">Third</Item>
|
||||||
|
</List>
|
||||||
|
<button onclick={changeSelection}>Change Selection</button>
|
Loading…
Reference in new issue