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

Объясните пожалуйста, почему это считается плохим подходом? Имею ввиду клонирование

пропсов в локальную переменную

Есть три основных очевидных варианта (необязательно все хорошие или применимы) при работе с формами:
1. props + emit - vue-way, вниз данные - вверх события
2. props + локальная переменная через клонирование
3. мутирование props

Пример второго пункта:

<MyForm :data="data" />
...

MyForm.vue

const props = defineProps({
data: { type: Object, required: true }
})

const emit = defineEmits({
submit: null
})

const editableData = ref()

onMounted(() => {
editableData.value = structuredClone(props.data) // глубокое клонирование
})

const submit = () => {
emit('submit', editableData.value)
}

Когда-то я услышал что это плохо, да и выглядит не очень, но не могу аргументировать это

@vklimv @djaler Извиняюсь что тегаю, но я вам доверяю и этот вопрос прям заел у меня в голове и вроде как он важен для понимания

3 ответов

5 просмотров

потому что получается два источника истины, которые надо синхронизировать (вотч на проп - меняем внутреннее состояние, вотч на внутреннее состояние - кидаем событие). Может случиться рассинхрон, если что-то не прозевал. Или может получиться вечный цикл обновлений, кстати (обновляется внутреннее состояние - делаем эмит - снаружи по нему обновляется состояние тоже - меняется проп - срабатывает вотчер - обновляется внутреннее состояние). Чтоб это предотвратить - нужно в этих вотчерах ещё делать проверки на то, что новое значение отличается от текущего. И если у тебя не примитив - нужно глубокое сравнение. Короче, это много кода, в котором можно проебаться

¿Сергей?- Автор вопроса
Kirill 🍅 Romanov
потому что получается два источника истины, которы...

А что если лишь единожды объект синкается, при mounted например?

¿Сергей?
А что если лишь единожды объект синкается, при mou...

ну тогда у тебя точно есть 2 рассинхронизированных источника истины

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

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

Если у меня есть такой класс: Object = {} function Object:new(a_name, a_transform, a_color, a_mesh, a_material, a_shader, a_textures) local private = {} private.n...
Cuarno Vile
4
зачем же переименовывать ? чтобы кол-во участников возросло или вдруг IBM от этого снова на свифте начнет кодить ? Я не понимаю что страшного в том что свифт гавно, если это т...
Oleh Nerzh
10
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
здравствуйте. совершаю вот такую вещь: strcpy(line, (char)current_number); где current number — неподписанный шорт, line — массив чаров. ругань следующая: main.c:29:30: error...
Roberto's Ширгозиев
13
@MrMiscipitlick А можешь макрос написать, который будет вычислять смещение относительно переданных меток? Просто .label1-.label2, и вернуть значение.
КТ315
35
А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
53
Добрый день! Подскажите, пожалуйста: какими компетенциями нужно обладать, чтобы претендовать на работу эрланг (отдельная благодарность, если про элексир тоже подскажете) разр...
via ☸️ led
20
Всем привет. Ребят подскажите пожалуйста. Вопрос по дизасемблировани. Начну с начала. У меня есть скомпилированная программа на ГО (я разработчик) - в ней есть защита лицензии...
Zloy
11
Можно попросить небольшое ревью кода? Тут немнога, я ничего интереснее не придумал, чем написать аналог tree в качестве практики с cmake. https://github.com/hrimov/tree-unix/...
Andrew Hrimov
11
Привет всем. появился вопрос. Разрабатываю сайт, в данный момент он запущен. Хостинг beget. Добавляю на сайт яндекс метрику с помощью полей client-settings (взято отсюда http...
Andrew
2
Карта сайта