mirror of https://github.com/sveltejs/svelte
fix: update value like attributes in a separate template_effect (#11720)
* fix: update value like attributes in a separate template_effect * chore: remove unnecessary commented code * chore: add test for spread valuespull/11726/head
parent
c21f019a4b
commit
77f91459b6
@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
"svelte": patch
|
||||||
|
---
|
||||||
|
|
||||||
|
fix: update value like attributes in a separate template_effect
|
@ -0,0 +1,34 @@
|
|||||||
|
import { test, ok } from '../../test';
|
||||||
|
import { flushSync } from 'svelte';
|
||||||
|
|
||||||
|
export default test({
|
||||||
|
mode: ['client'],
|
||||||
|
|
||||||
|
async test({ assert, target }) {
|
||||||
|
/**
|
||||||
|
* @type {HTMLInputElement | null}
|
||||||
|
*/
|
||||||
|
const input = target.querySelector('input[type=text]');
|
||||||
|
const button = target.querySelector('button');
|
||||||
|
/**
|
||||||
|
* @type {HTMLInputElement | null}
|
||||||
|
*/
|
||||||
|
const checkbox = target.querySelector('input[type=checkbox]');
|
||||||
|
const textarea = target.querySelector('textarea');
|
||||||
|
ok(input);
|
||||||
|
ok(button);
|
||||||
|
ok(checkbox);
|
||||||
|
ok(textarea);
|
||||||
|
|
||||||
|
flushSync(() => {
|
||||||
|
input.value = 'foo';
|
||||||
|
checkbox.click();
|
||||||
|
textarea.innerHTML = 'bar';
|
||||||
|
button.click();
|
||||||
|
});
|
||||||
|
|
||||||
|
assert.equal(input.value, 'foo');
|
||||||
|
assert.equal(checkbox.checked, true);
|
||||||
|
assert.equal(textarea.innerHTML, 'bar');
|
||||||
|
}
|
||||||
|
});
|
@ -0,0 +1,13 @@
|
|||||||
|
<script>
|
||||||
|
let count = 0;
|
||||||
|
let value = { value: "" };
|
||||||
|
let checked = { value: false };
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<input type="text" value={value.value} />
|
||||||
|
|
||||||
|
<textarea value={value.value}></textarea>
|
||||||
|
|
||||||
|
<input type="checkbox" checked={checked.value} />
|
||||||
|
|
||||||
|
<button on:click={()=>count++}>{count}</button>
|
@ -0,0 +1,34 @@
|
|||||||
|
import { test, ok } from '../../test';
|
||||||
|
import { flushSync } from 'svelte';
|
||||||
|
|
||||||
|
export default test({
|
||||||
|
mode: ['client'],
|
||||||
|
|
||||||
|
async test({ assert, target }) {
|
||||||
|
/**
|
||||||
|
* @type {HTMLInputElement | null}
|
||||||
|
*/
|
||||||
|
const input = target.querySelector('input[type=text]');
|
||||||
|
const button = target.querySelector('button');
|
||||||
|
/**
|
||||||
|
* @type {HTMLInputElement | null}
|
||||||
|
*/
|
||||||
|
const checkbox = target.querySelector('input[type=checkbox]');
|
||||||
|
const textarea = target.querySelector('textarea');
|
||||||
|
ok(input);
|
||||||
|
ok(button);
|
||||||
|
ok(checkbox);
|
||||||
|
ok(textarea);
|
||||||
|
|
||||||
|
flushSync(() => {
|
||||||
|
input.value = 'foo';
|
||||||
|
checkbox.click();
|
||||||
|
textarea.innerHTML = 'bar';
|
||||||
|
button.click();
|
||||||
|
});
|
||||||
|
|
||||||
|
assert.equal(input.value, 'foo');
|
||||||
|
assert.equal(checkbox.checked, true);
|
||||||
|
assert.equal(textarea.innerHTML, 'bar');
|
||||||
|
}
|
||||||
|
});
|
@ -0,0 +1,17 @@
|
|||||||
|
<script>
|
||||||
|
let count = $state(0);
|
||||||
|
let value = $state({
|
||||||
|
value: "",
|
||||||
|
});
|
||||||
|
let checked = $state({
|
||||||
|
checked: false,
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<input type="text" {...value} />
|
||||||
|
|
||||||
|
<textarea {...value}></textarea>
|
||||||
|
|
||||||
|
<input type="checkbox" {...checked} />
|
||||||
|
|
||||||
|
<button onclick={()=>count++}>{count}</button>
|
@ -0,0 +1,34 @@
|
|||||||
|
import { test, ok } from '../../test';
|
||||||
|
import { flushSync } from 'svelte';
|
||||||
|
|
||||||
|
export default test({
|
||||||
|
mode: ['client'],
|
||||||
|
|
||||||
|
async test({ assert, target }) {
|
||||||
|
/**
|
||||||
|
* @type {HTMLInputElement | null}
|
||||||
|
*/
|
||||||
|
const input = target.querySelector('input[type=text]');
|
||||||
|
const button = target.querySelector('button');
|
||||||
|
/**
|
||||||
|
* @type {HTMLInputElement | null}
|
||||||
|
*/
|
||||||
|
const checkbox = target.querySelector('input[type=checkbox]');
|
||||||
|
const textarea = target.querySelector('textarea');
|
||||||
|
ok(input);
|
||||||
|
ok(button);
|
||||||
|
ok(checkbox);
|
||||||
|
ok(textarea);
|
||||||
|
|
||||||
|
flushSync(() => {
|
||||||
|
input.value = 'foo';
|
||||||
|
checkbox.click();
|
||||||
|
textarea.innerHTML = 'bar';
|
||||||
|
button.click();
|
||||||
|
});
|
||||||
|
|
||||||
|
assert.equal(input.value, 'foo');
|
||||||
|
assert.equal(checkbox.checked, true);
|
||||||
|
assert.equal(textarea.innerHTML, 'bar');
|
||||||
|
}
|
||||||
|
});
|
@ -0,0 +1,13 @@
|
|||||||
|
<script>
|
||||||
|
let count = $state(0);
|
||||||
|
let value = $state("");
|
||||||
|
let checked = $state(false);
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<input type="text" {value} />
|
||||||
|
|
||||||
|
<textarea {value}></textarea>
|
||||||
|
|
||||||
|
<input type="checkbox" {checked} />
|
||||||
|
|
||||||
|
<button onclick={()=>count++}>{count}</button>
|
Loading…
Reference in new issue