169 похожих чатов

Верно я понимаю что основное практическое назначение toRef во vue

3 - предоставление реактивности для состояния в ответ как на изменение извне (props), так и на изменение изнутри (присваивание через свойство value)?

17 ответов

21 просмотр

Нет. Пропсы нельзя менять изнутри

Sasha- Автор вопроса
Kirill 🍅 Romanov
Нет. Пропсы нельзя менять изнутри

Видимо вы меня не поняли. Я имел в виду что с помощью toRef наверное удобно организовать state внутри компонента который будет меняться как при прямом изменении, так и при изменении свойства, переданного извне компонента. И если я правильно понял, то для этого он и создан?

скорее это боксинг для консистентности api

Sasha
Видимо вы меня не поняли. Я имел в виду что с помо...

> удобно организовать state внутри компонента который будет меняться как при прямом изменении ну вот тут ты про что?

Sasha- Автор вопроса
Kirill 🍅 Romanov
> удобно организовать state внутри компонента кото...

Ну например компонент, внутри которого есть поле ввода. Снаружи передавать text prop, внутри держать currentText ref. С помощью toRef(props, "text") можно управлять текстом как меняя text снаружи компонента, так и с помощью currentText.value = "new value" внутри него.

Ну это и есть мутация пропса изнутри

Sasha- Автор вопроса
Kirill 🍅 Romanov
Ну это и есть мутация пропса изнутри

А в чем именно мутация? Здесь же только односторонняя привязка. Изменение prop меняет состояние, но изменение состояния не меняет prop. Если я правильно понял работу toRef.

Sasha
А в чем именно мутация? Здесь же только односторон...

Да toRefs - просто утилита, чтобы из объекта сделать нормальный реактивный объект

Sasha
А в чем именно мутация? Здесь же только односторон...

Вы хотите при маунте компонента делать копию пропса чтобы локально его менять?

Sasha
Ага.

Тогда это нормально, довольно часто бывает полезно

Sasha- Автор вопроса
Volodymyr Klimov
Да toRefs - просто утилита, чтобы из объекта сдела...

Чтобы сделать из объекта реактивный объект toRef не нужен. Достаточно const reactiveObj = reactive(notReactiveObj).

Так они по разному работают

Sasha- Автор вопроса
Volodymyr Klimov
Так они по разному работают

Вы писали "чтобы из объекта сделать нормальный реактивный объект". Это можно сделать без toRef.

Sasha- Автор вопроса
Kirill 🍅 Romanov
Ну это и есть мутация пропса изнутри

Накидал пример https://is.gd/frojZL (сокращенная ссылка на Vue SFC playground). Похоже вы были правы и toRef для моей цели не подойдет. Как бы вы решили задачу по ссылке?

Sasha
Ну например компонент, внутри которого есть поле в...

Это называется деривативный стейт (стейт от стейта). Всё идёт хорошо ровно до того момента пока вам не нужно его синхронизировать в обе стороны.

Sasha- Автор вопроса
Stanislav Lashmanov
Это называется деривативный стейт (стейт от стейта...

Как тогда решать вот такую задачу https://is.gd/frojZL храня состояние в дочернем компоненте?

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Карта сайта