компоненты не теряя их свойств и сохраняя возможность отслеживания изменений через watch?
Если просто :param="dataRef" / :param="props.dataRef" - передается значение.
Задача иметь возможность реагировать на изменения примененные в одном дочернем компоненте в цепочке смежных копонентов.
Реагировать можно только на объект props в дочерних компонентах. То что у вас пропадает реактивность говорит о том что вы из пропсов данные деструктурируете.
Т.е. реагировать не на конкретное свойство внутри пропс, а на весь объект? При любой передаче ref в свойства в компоненте значение. Никак не пойму, это нормально и так и должно быть или что-то я делаю не так?
Props это computed на который можно реагировать. const foo = props.foo // потеряли реактивность, т.к. следим уже не за пропсами.
watch (props.refId, ...) и вот тут уже лежит значение.
watch(() = > props.field, ...
Руководствуюсь - https://vuejs.org/guide/essentials/watchers.html
Только ожидаю, что ref придет из свойства пропсов
пропсы не реактивны, поэтому нужно () => props.field
Да!? А куда смотреть?
Пропсы реактивны как раз
Я не знаю где это в доке, но foo !== foo.bar, это разные выражения.
то есть watch(props.field) будет норм работать?
Нет, то есть watch(props) будет работать
Тут я вижу только одно утверждение. Но никак не пойму как это применимо к моей задаче ( Прошу пояснить.
А, понял, блин а логично на самом деле :)
Следить можно только за рефами. Ты хочешь чтобы ты написал watch(1, ...) и оно автоматически знало когда ты изменил объект в котором лежала эта единица, так не работает.
А есть ли ссылка на документацию?
Хз, не помню как к этому пришел :)
Да, я понимаю, что следить можно только за рефами. В родительском компоненте я вкладываю реф в свойсва дочернего. Ожидаю, что в пропсах дочернего будет лежать реф, но там значение. Мой вопрос как следить за изменением реф в одном компоненте в других смежных компонентах?
вотчер для внутреннего состояния, а так емиты, v-model
props не оборачивает то что вы передаёте в рефы дополнительно и не должен
Просто я или плохо читаю и не туда нажимаю. https://vuejs.org/guide/essentials/watchers.html
Да, но это очень громоздко, ведь наверняка все проще должно быть!?
Вот примерно в этом у меня и возникакет недопонимание. Он не то чтобы не оборачивает, он скорее разворачивает ссылки в значения.
можно еще такие штуки использовать, https://www.youtube.com/watch?v=qGqebwUxWrw
Так это просто иной реактивный источник. Если предположить, что в пропсе лежит реф, то должно работать props.dataRef. У меня так не получается и потому я спросил, это я что-то делаю не так или так и должно быть. А если так и должно быть, то как сделать правильно )
Ох... А вот это не считается костылингом?
нет, в вью даже defineModel завезли который делает тоже самое, ваше "элегантное" решение :)
Вот так проще и одной строчкой
И снова я недопонял. Прошу пояснить. )
https://www.youtube.com/watch?v=jJwKmoUut8A
Я не пытаюсь что-то доказать. Мне хочется научиться делать правильно.
https://blog.vuejs.org/posts/vue-3-3
Большое спасибо! Но все равно выходит, что для работы с ссылкой вместо прямой работы с ней нагородили эмит + компьютед и все это еще и "узаконили". Зачем!?
можете сразу мутировать пропсы 🌚, впринципе можно, и, главное, удобно
Спасибо! Эта возможность в разделе Experimental Features.
Он ничего не разворачивает. Если написать :foo="1" то туда и должна прийти единица.
А если :foo="dataRef" ? Он развернет (деструктурирует) ссылку в свойство.
Да, но речь была про то что он оборачивает.
Я такого нигде не говорил. Я сказал, что он развернет ссылку в значение.
Даже если так это ничего не меняет, надо следить за объектом пропсов
Да, Вы правы, большое спасибо! Я невнимательно прочитал документацию, сделал поспешные ошибочные предположения.
да, весьма опрометчиво было делать поспешные выводы о архитектурных решениях данного фреймворка, но ничего, вы на верном пути!
🤝 Большое спасибо за помощь!
Обсуждают сегодня