3 - предоставление реактивности для состояния в ответ как на изменение извне (props), так и на изменение изнутри (присваивание через свойство value)?
Нет. Пропсы нельзя менять изнутри
Видимо вы меня не поняли. Я имел в виду что с помощью toRef наверное удобно организовать state внутри компонента который будет меняться как при прямом изменении, так и при изменении свойства, переданного извне компонента. И если я правильно понял, то для этого он и создан?
скорее это боксинг для консистентности api
> удобно организовать state внутри компонента который будет меняться как при прямом изменении ну вот тут ты про что?
Ну например компонент, внутри которого есть поле ввода. Снаружи передавать text prop, внутри держать currentText ref. С помощью toRef(props, "text") можно управлять текстом как меняя text снаружи компонента, так и с помощью currentText.value = "new value" внутри него.
Ну это и есть мутация пропса изнутри
А в чем именно мутация? Здесь же только односторонняя привязка. Изменение prop меняет состояние, но изменение состояния не меняет prop. Если я правильно понял работу toRef.
Да toRefs - просто утилита, чтобы из объекта сделать нормальный реактивный объект
Вы хотите при маунте компонента делать копию пропса чтобы локально его менять?
Тогда это нормально, довольно часто бывает полезно
Чтобы сделать из объекта реактивный объект toRef не нужен. Достаточно const reactiveObj = reactive(notReactiveObj).
Так они по разному работают
Вы писали "чтобы из объекта сделать нормальный реактивный объект". Это можно сделать без toRef.
Накидал пример https://is.gd/frojZL (сокращенная ссылка на Vue SFC playground). Похоже вы были правы и toRef для моей цели не подойдет. Как бы вы решили задачу по ссылке?
Это называется деривативный стейт (стейт от стейта). Всё идёт хорошо ровно до того момента пока вам не нужно его синхронизировать в обе стороны.
Как тогда решать вот такую задачу https://is.gd/frojZL храня состояние в дочернем компоненте?
Обсуждают сегодня