Я немного запутался здесь, и, к сожалению, я не смог найти никакого решения на канале разногласий svelte, поэтому я иду ...
У меня есть довольно простой пример двух классов, пусть это будут App
и Comp
. App
создает Comp
экземпляр, а затем обновляет value
этого экземпляра после нажатия кнопки.
Экземпляр Comp должен установить это значение в другую переменную (inputValue
), и при изменении этой переменной он должен активировать validate(inputValue)
, что является реактивным. Вот REPL: https://svelte.dev/repl/1df2eb0e67b240e9b1449e52fb26eb14?version=3.25.1
App.svelte:
<script>
import Comp from './Comp.svelte';
let value = 'now: ' + Date.now();
function clickHandler(e) {
value = 'now ' + Date.now();
}
</script>
<Comp
bind:value={value}
/>
<button type="button" on:click={clickHandler}>change value</button>
Comp.svelte:
<script>
import { onMount } from 'svelte';
export let value;
let rendered = false;
let inputValue = '';
$: validate(inputValue); // This doesn't execute. Why?
function validate(val) {
console.log('validation:', val);
}
onMount(() => {
rendered = true;
});
$: if (rendered) {
updateInputValue(value);
}
function updateInputValue(val) {
console.log('updateInputValue called!');
if (!value) {
inputValue = '';
}
else {
inputValue = value;
}
}
</script>
<input type="text" bind:value={inputValue}>
Итак, как только значение изменится:
- Реактивное
if (rendered) {...}
состояние называется - Вызывается
updateInputValue
и изменяетсяinputValue
. Элемент ввода HTML обновляется до этого значения. validate(inputValue)
никогда не реагирует на это изменение - ПОЧЕМУ?
Если я опущу дополнительный вызов функции updateInputValue
в реактивном if (rendered)
условии и помещу код тела updateInputValue
функции непосредственно в условие, то validate(inputValue)
сработает правильно, т. Е .:
// works like this
$: if (rendered) {
if (!value) {
inputValue = '';
}
else {
inputValue = value;
}
}
Так почему же это не работает при обновлении в функции?
inputValue
, т.е. исключает вызов реактивного оператораif
и, следовательно, функцииupdateInputValue
. Но мне нужно иметь возможность обновлять значение извне компонента = ›изменение свойстваvalue
. - person Fygo   schedule 17.09.2020