которое будет меняться в компоненте и изменения через emit уходит выше.
Если внутри компонента указываю через v-model привязку к элементу то ругается что неожиданная мутация. Что логично, но как правильно?
Не меняй пропс, а только емити. Он сам спустится назад
да я так и делаю но удобно сразу пропс вставить в v-model вот так но он тогда ругается
Оберни в computed c геттером и сеттером
да что то в голове что то такое такое мелькнуло. т.е. в set делать emit? Я реализовал иначе - сделал props и data в которой локальный значения привязаны к элементам а в created локальным значениям из дата присваиваются props. Ну а дальше на все изменения emit и в итоге все работает, но чувство что это костыль. Через сеттеры и гетеры правильней?
Не удобно и ведет к куче проблем, кроме того судя по коду тебе здесь вся formData и не нужна
ну да, мне из всего объекта три значения надо. Но даже если в пропс передам три, то ситуацию то это никак не поменяет...
дальше обычный emit без всяких чудес с объектами и ключами, либо computed свойство с get и set, которое на запись эмитит а на прием передает
про computed подсказали, там я понял. Поясни ,пожалуйста, а что изменит если я буду в пропс не объект передавать а конкретное значение (число). Разве от того что я в v-bind укажу пропс с одиночным значением, а на изменения ввода буду emit делать у меня ругатсья не будет что я меняю props?
а ты не будешь менять проп, ты будешь менять computed
Что-то такое получится <input v-model="prop"> { props: { someValue: { type: String, default: '' } } computed: { prop: { get() { return this.someValue }, set(newValue) { this.$emit('input', newValue) } } } }
а ну такой вариант я понял. думал что то иное еще ты предлагал. Спасибо!
Другой вариант это твоя запись но без промежуточного объекта
Так а она не работает. У меня на нее Eslint ругается до ошибки :) Говорит нельзя мутировать props
Ты никогда не сможешь мутировать проп, это нормально. Вот о чем я говорю <input @input="$emit('input', $event)" :value="someValue"> { props: { someValue: { type: String, default: '' } } }
ну да, это не работает с EsLint и без объекта. Сделал на computed, работает! Кода наверное чуть больше, но он читаемый хорошо и все логично. 👍
В created - это если данные не асинхронные и уверен, что не будут меняться посередине процесса. Иначе watch
Да, побольше watch добавить
А как обрабатывать в компоненте изменения пропса?
Обсуждают сегодня