localValues = values; }
$: setLocalValues(values);
Ну да, в таком случае это наверное единственный рабочий вариант Но можно попробовать еще с евентом вместо биндов либо с иммутабом.. Это происходит, т.к. в выражении присутствуют объекты / массивы, а свелт перезапускает код, т.к. не знает, поменялось ли что-то внутри
Теперь понятно, спасибо Получается наиболее краткий вариант всё же с функцией
Ну я бы не сказал что он наиболее краткий, но точно наиболее надёжный
Он немного увеличивает скрипт, но укорачивает input, а input'ов может быть много <script> let localValues = {}; let values = { ip: "10.10.10.10" }; function setLocalValues (values) { localValues = values; } $: setLocalValues(values); </script> <input bind:value={values.ip} /> <input bind:value={localValues.ip} /> ————————————- <script> let values = { ip: "10.10.10.10" }; $: localValues = values; </script> <input value={values.ip} on:input={e => values.ip = e.target.value} /> <input value={localValues.ip} on:input={e => localValues.ip = e.target.value} />
Если любишь покороче можешь записать вот так: const setLocalValues = values => localValues = values;
А у вас за таким кодом какая задача-то? Я такой код обычно пишу, когда мне нужно устанавливать начальные значения. В таком случае проще писать вот так, потому что оно устанавливает понятный механизм зависимости. let localValues = null $: if(!localValues) localValues = { ...values }
Лучше все таки предпочесть первый вариант, чтобы когда(или если?) понадобится добавить select - можно было с ним также работать как с инпутом. Если же второй вариант использовать, то на мобилках может не срабатывать реактивность правильно
Дополнительные плюсы первого варианта, замечательно
Задача обновлять локальные значения, когда приходят новые с сервера https://svelte.dev/repl/75c24f64fadb4c098f0363297d471f1d?version=3.38.2
Обсуждают сегодня