Контекст не реагирует в Svelte, то есть изменения в значении не отслеживаются. Вам нужно что-то реактивное, чтобы представление реагировало.
Что вы можете сделать, это поместить store в контекст.
Например, в App.svelte
:
import { setContext } from 'svelte'
import { writable } from 'svelte/store'
let data = writable({});
setContext("data", data);
Затем, глубже в дочернем компоненте (обратите внимание на префикс $
для чтения / записи значения хранилища в шаблоне):
let data = getContext("data");
const handleInput = event => {
// NOTE the dollar prefix to access the value
$data[fieldName] =
event.target.type === "checkbox"
? event.target.checked
: event.target.value;
};
REPL с использованием хранилища в context
Другим способом было бы просто использовать двустороннее связывание .
In App.svelte
:
<script>
// ...
let data = {};
</script>
<Form submit={submit}>
<FormField bind:data ... />
{#if data.type && data.type === 'Local'}
<FormField bind:data ... />
{/if}
</Form>
И в вашем FormField.svelte
:
export let data
REPL с использованием привязки