mirror of https://github.com/sveltejs/svelte
fix: remove let variable from select binding dependencies (#8969)
Fixes #2943 The issue linked above invalidates a variable that is not defined in <script> but instead is defined as a let: variable, which does not make sense to invalidate, therefore, this PR exists.pull/8928/head
parent
cb1358cc41
commit
f8283fbc77
@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
'svelte': patch
|
||||||
|
---
|
||||||
|
|
||||||
|
fix: remove `let:variable` slot bindings from select binding dependencies
|
@ -0,0 +1,6 @@
|
|||||||
|
<script>
|
||||||
|
const tasks = ["do laundry", "do taxes", "cook food", "watch the kids"];
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<slot {tasks} />
|
||||||
|
|
@ -0,0 +1,25 @@
|
|||||||
|
export default {
|
||||||
|
html: `
|
||||||
|
<select>
|
||||||
|
<option value='do laundry'>do laundry</option>
|
||||||
|
<option value='do taxes'>do taxes</option>
|
||||||
|
<option value='cook food'>cook food</option>
|
||||||
|
<option value='watch the kids'>watch the kids</option>
|
||||||
|
</select>
|
||||||
|
<p>1</p>
|
||||||
|
`,
|
||||||
|
|
||||||
|
async test({ assert, component, target, window }) {
|
||||||
|
const select = target.querySelector('select');
|
||||||
|
const options = target.querySelectorAll('option');
|
||||||
|
|
||||||
|
assert.equal(component.tasks_touched, 1);
|
||||||
|
|
||||||
|
const change = new window.Event('change');
|
||||||
|
options[1].selected = true;
|
||||||
|
await select.dispatchEvent(change);
|
||||||
|
|
||||||
|
assert.equal(component.selected, options[1].value);
|
||||||
|
assert.equal(component.tasks_touched, 1);
|
||||||
|
}
|
||||||
|
};
|
@ -0,0 +1,19 @@
|
|||||||
|
<script>
|
||||||
|
import Parent from "./Parent.svelte";
|
||||||
|
export let selected;
|
||||||
|
export let tasks = ['do nothing'];
|
||||||
|
export let tasks_touched = 0;
|
||||||
|
|
||||||
|
$: {
|
||||||
|
tasks, tasks_touched++;
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<Parent let:tasks={tasks}>
|
||||||
|
<select bind:value={selected}>
|
||||||
|
{#each tasks as task}
|
||||||
|
<option value={task}>{task}</option>
|
||||||
|
{/each}
|
||||||
|
</select>
|
||||||
|
</Parent>
|
||||||
|
<p>{tasks_touched}</p>
|
@ -0,0 +1,6 @@
|
|||||||
|
<script>
|
||||||
|
const tasks = ["do laundry", "do taxes", "cook food", "watch the kids"];
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<slot {tasks} />
|
||||||
|
|
@ -0,0 +1,21 @@
|
|||||||
|
export default {
|
||||||
|
html: `
|
||||||
|
<select>
|
||||||
|
<option value='do laundry'>do laundry</option>
|
||||||
|
<option value='do taxes'>do taxes</option>
|
||||||
|
<option value='cook food'>cook food</option>
|
||||||
|
<option value='watch the kids'>watch the kids</option>
|
||||||
|
</select>
|
||||||
|
`,
|
||||||
|
|
||||||
|
async test({ assert, component, target, window }) {
|
||||||
|
const select = target.querySelector('select');
|
||||||
|
const options = target.querySelectorAll('option');
|
||||||
|
|
||||||
|
const change = new window.Event('change');
|
||||||
|
options[1].selected = true;
|
||||||
|
await select.dispatchEvent(change);
|
||||||
|
|
||||||
|
assert.equal(component.selected, options[1].value);
|
||||||
|
}
|
||||||
|
};
|
@ -0,0 +1,12 @@
|
|||||||
|
<script>
|
||||||
|
import Parent from "./Parent.svelte";
|
||||||
|
export let selected;
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<Parent let:tasks={tasks}>
|
||||||
|
<select bind:value={selected}>
|
||||||
|
{#each tasks as task}
|
||||||
|
<option value={task}>{task}</option>
|
||||||
|
{/each}
|
||||||
|
</select>
|
||||||
|
</Parent>
|
Loading…
Reference in new issue