решение, как прокидывать данные в дочерний компонент, менять их там и чтобы они реактивно изменялись в родительском компоненте?
                  
                  
                  
                  
                  
                  Родительский компонент:
                  
                  
                  <template>
                  
                  
                    <accordion-item-start key="start" :componentQuizData="quizData" @update:page-data="updatePageData" />
                  
                  
                  </template>
                  
                  
                  
                  
                  
                  <script>
                  
                  
                  import AccordionItemStart from "@/components/constructor/control/AccordionItemStart.vue";
                  
                  
                  export default {
                  
                  
                    components: {
                  
                  
                      AccordionItemStart,
                  
                  
                    },
                  
                  
                    data() {
                  
                  
                      quizData: null,
                  
                  
                    },
                  
                  
                    methods: {
                  
                  
                      getData() {
                  
                  
                        // Получаю данные с сервера
                  
                  
                        this.quizData = response
                  
                  
                      },
                  
                  
                      updatePageData(newData) {
                  
                  
                        this.quizData = newData;
                  
                  
                      },
                  
                  
                    },
                  
                  
                    mounted() {
                  
                  
                      this.getData()
                  
                  
                    }
                  
                  
                  </script>
                  
                  
                  
                  
                  
                  
                  
                  
                  Дочерний компонент:
                  
                  
                  <template>
                  
                  
                    <textarea v-model="quizData.text"></textarea>
                  
                  
                  </template>
                  
                  
                  
                  
                  
                  <script>
                  
                  
                  export default {
                  
                  
                    props: {
                  
                  
                      componentQuizData: {
                  
                  
                        type: Object,
                  
                  
                        required: true,
                  
                  
                      },
                  
                  
                    },
                  
                  
                    data() {
                  
                  
                      quizData: this.componentQuizData,
                  
                  
                    },
                  
                  
                    methods: {
                  
                  
                      updatePageData(newData) {
                  
                  
                        this.$emit('update:page-data', this.quizData);
                  
                  
                      },
                  
                  
                    },
                  
                  
                    watch: {
                  
                  
                      quizData: {
                  
                  
                        deep: true,
                  
                  
                        handler(newObj) {
                  
                  
                          this.updatePageData(newObj)
                  
                  
                        }
                  
                  
                      }
                  
                  
                    }
                  
                  
                  </script>
                  
                  
                  
                  
                  
                  Получается, я прокидываю пропсом объект, присваиваю его локальной переменной, присоединяю к её значениям v-model и вешаю watch на изменение этой переменной. Если она изменяется, обновляю переменную в родительском компоненте через emit?
                  
                  
                  (Компоненты упрощены во избежание лишнего кода)
                  
                  
                
из обекта нужно сделать копию, у тебя сейчас ссылка сохраняется
Эмит делаешь наверх с новыми данными
И в родителе записываешь
Это vue3 фича через update в модел обновлять
У меня Vue3, но options API. С composition только пытаюсь разобраться
по сути ок, просто сделай копию пропса обекта и присваивай в дочерний стейт
так ему же и надо поменять в родителе данные, или я че то не так понимаю
он присвои пропс обект (без клонирования) в локальный стейт чаелда, а мы знаем отличительное свойство оебктов в js?
если что вот
Обсуждают сегодня