Как перейти с on-change на Valtio в ванильном JS
месяц назад
Nikolai Gagarinov
Ответы
Мы заменяем on-change на valtio/vanilla, чтобы подписываться на изменения состояния и обновлять UI.
Ссылки
- Valtio — официальный сайт
- Valtio (vanilla) — документация
- Valtio API — proxy, subscribe, snapshot
- Valtio utils — proxySet, subscribeKey
- Valtio репозиторий
- on-change репозиторий
Почему Valtio
proxyделает состояние реактивным без ручного вызова рендера.subscribeпозволяет слушать изменения нужных частей состояния.- Можно продолжать мутировать объект напрямую (как и раньше).
Минимальный пример
До (on-change):
После (Valtio):
Подписка на кусок состояния
Если нужно реагировать только на часть состояния:
Важно: подписка на state.form работает, только если вы меняете поля, а не заменяете весь объект form.
Не заменяйте вложенные объекты целиком
Так делать не стоит, если вы подписываетесь на вложенный объект:
Лучше так:
Если вы все-таки хотите заменять объект целиком, нужно подписываться на корневой объект:
Особенность Set
Обычный Set не реактивен. Для него есть proxySet:
Короткий пример из RSS Reader
Подписка в модуле View:
Изменения в модели:
Итог
on-changeзаменяем наvaltio/vanilla.- Состояние — через
proxy. - Обновления UI — через
subscribeиsnapshot. - Вложенные объекты мутируем по полям.
- Для
SetиспользуемproxySet.
месяц назад
Nikolai Gagarinov
Похожие вопросы
108813 г. Москва, вн.тер.г. поселение Московский,
г. Московский, ул. Солнечная, д. 3А, стр. 1, помещ. 20Б/3
ОГРН 1217300010476
ИНН 7325174845