компоненте, инстансов которого создаётся приличное количество и они периодически демонтируются отлично комбинируется с мутирующим объектом, хранящим стейт инстансов этого компонента через bind
// instanceId получается в each
<TextSelector
bind:items={$storage[instanceId].items}
bind:selectedIds={$storage[instanceId].selectedIds}
/>
я думаю что это очень круто, т.к. TextSelector работает со своим стейтом иммутабельно и все $: повешенные на selectedIds, или items будут срабатывать только один раз, когда поменялся реф
а если не использовать эту опцию, то бинд сначала отправляет данные наверх, и потом они возвращаются обратно в пропс и триггерят $: и afterUpdate ещё раз, т.к. мы не используем рефы для понимания изменилось что-то в объекте или нет
учитывая, что $storage целиком напрямую нигде не используется в шаблонах, то думаю в его мутабельности нет особой побочки, но есть очевидное удобство
есть мысли на этот счёт? 🙃
Ну какие мысли. Если разобрался как работает реактивность, дальше уже от задачи можно крутить как надо. В твоем случае видимо это хороший вариант. Иммутабильность да нужна в основном чтобы зазря не триггерить лишние действия, хотя в целом в шаблонах все равно работа идет с примитивами и соответственно на последнем шаге непосредственно до DOM манипуляции значения примитива еще раз сравниваются, чтобы не тригерить DOM. Все тоже самое только руками можно организовать по месту для любого $: или afterUpdate
Обсуждают сегодня