Size: a a a

2020 September 13

МТ

Марк Танащук... in Svelte [svelt]
Oleg N
она ассинхронная (через промис), но у промиса видимо приоритет выше чем у евентов
Не пойму где именно промисы находятся 😓
источник

МТ

Марк Танащук... in Svelte [svelt]
В каком хелпере
источник

ON

Oleg N in Svelte [svelt]
Марк Танащук
Не пойму где именно промисы находятся 😓
$invalidate -> schedule_update() -> resolved_promise.then(flush);
источник

ON

Oleg N in Svelte [svelt]
а flush уже делает пербор компонентов и проверки
источник

МТ

Марк Танащук... in Svelte [svelt]
Oleg N
$invalidate -> schedule_update() -> resolved_promise.then(flush);
Это в сурцах?

https://github.com/sveltejs/svelte/blob/master/src/compiler/compile/render_dom/invalidate.ts

Я тут ничего асинхронного не нахожу
источник

ON

Oleg N in Svelte [svelt]
а после флуша вызывается второй евент
источник

МТ

Марк Танащук... in Svelte [svelt]
Или я не там ищу?🤔
Там такая запутанная стуктура
источник

ON

Oleg N in Svelte [svelt]
Марк Танащук
Или я не там ищу?🤔
Там такая запутанная стуктура
https://svelte.dev/repl/fd917e3f40af4aeba119e87221c79cda?version=3.25.0

открой консоль и кликни кнопку
источник

МТ

Марк Танащук... in Svelte [svelt]
Oleg N
https://svelte.dev/repl/fd917e3f40af4aeba119e87221c79cda?version=3.25.0

открой консоль и кликни кнопку
А, ясненько
источник

PM

Pavel 🦇 Malyshev in Svelte [svelt]
Pavel
Драгула тормозит на телефонах
Это не я предлагал его. Вопрошающий сказал что драгула был бы идеален.
источник

PM

Pavel 🦇 Malyshev in Svelte [svelt]
Alexander Ponomarev
хорошая либа, все предсказуемо и понятно
собственно все предсказуемо же. надо такие вещи делать afterUpdate. А вообще по-хорошему через #if
источник

PM

Pavel 🦇 Malyshev in Svelte [svelt]
Кирилл Спасибович
Мне кажется лучше вместо дисплей нона обернуть в иф а фокус сделать на экшене
+1
источник

PM

Pavel 🦇 Malyshev in Svelte [svelt]
Кирилл Спасибович
Либо setTimeout, либо getComputedStyle, в общем проблема та же, что синхронный код не дожидается рендера инпута
если прям до невозможности хочется накостылять, вместо того чтобы юзать лайсайкл, то лучше уж не setTimeout, а встроенный tick
источник

PM

Pavel 🦇 Malyshev in Svelte [svelt]
radimir
setTimeout не помогает - только два последовательных обработчика события
сморти, изменяя стейт (в данном случае active) зависимые от него изменения в DOM применяются асинхронно, то есть не сразу как ты изменил его. если быть точным, все изменения накатываются в конце тика, в фазе микротасков. чтобы сделать какое-то действие с DOM элементом, зависимым от стейта и быть уверенным, что DOM уже приведен в актуальное состояние (синхронизирован со стейтом), есть лайф-сайкл метод afterUpdate. Поэтому твоя реализация могла бы выглядеть например так:
https://svelte.dev/repl/844bf7458ec6451b8b5fca99efe8273c?version=3.25.0
источник

PM

Pavel 🦇 Malyshev in Svelte [svelt]
В Svelte 2 рендеринг был синхронный, потому что стейт можно было применить сразу с помощью метода this.set({ foo, bar, baz })
источник

PM

Pavel 🦇 Malyshev in Svelte [svelt]
в svelte 3 мы меняем переменные и поэтому мы должны ждать пока все изменения стейта накопятся, а потом разом применить их:

foo = 1;
bar = 2;
baz = 3;
источник

PM

Pavel 🦇 Malyshev in Svelte [svelt]
если бы рендеринг в этом случае был бы синхронный, то DOM тригерился бы после каждого присвоения.
источник

PM

Pavel 🦇 Malyshev in Svelte [svelt]
альтернативная реализация через tick: https://svelte.dev/repl/8ae932e3c3dd452aac4262d920abec13?version=3.25.0
источник

AP

Alexander Ponomarev in Svelte [svelt]
я не понимаю почему эвенты не атомарно применяются =)
источник

PM

Pavel 🦇 Malyshev in Svelte [svelt]
Alexander Ponomarev
я не понимаю почему эвенты не атомарно применяются =)
в смысле ты не понимаешь как работают микротаски или не понимаешь почему так сделано именно в свелт?
источник