Итак, я изучаю Vue.js, и после небольшой борьбы я (каким-то образом) получил следующий фрагмент кода , работающий .Я знаю, что если это работает, это не глупо, но, тем не менее, я хотел бы получить помощь о том, как улучшить мой код, поскольку я сомневаюсь, что я использую правильный подход.
Следующий код позволяет пользователю добавлять несколько экземпляров компонента Item, нажимая кнопку.Ввод поля имени в Item передается объекту, который вставляется в массив, который отправляется обратно в родительский компонент.
Моя главная проблема с этим подходом состоит в том, что массив items используется всеми экземплярами Item как опора, что не нужно.Однако я не могу придумать другое решение, потому что я знаю, как обмениваться данными между компонентами, передавая их как опору и обновляя.Я также читал, что реквизиты должны обновляться только родителем, поэтому я предполагаю, что я также нарушаю это правило.
Может ли кто-нибудь научить меня лучшему подходу?
Родительский код
<template>
<div class="items">
<div v-for="n in itemCount">
<Item :count="n" :items="items" />
</div>
</div>
<button @click="addItem">Add item</button>
</template>
<script>
import Item from './../components/Item'; //the child
export default {
components: {
Item
},
data() {
return {
itemCount: 1,
items: [],
}
},
methods: {
addItem() {
this.itemCount ++;
}
}
}
</script>
Ребенок
<template>
<div class="item">
<label>Item name</label>
<input type="text" v-model="name" @input="update(count)" />
</div>
</template>
<script>
export default {
props: ['items','count'],
data() {
return {
name: '',
}
},
methods: {
createItem(index) {
return {
index: index-1,
name: this.name,
}
},
update(index) {
const item = this.createItem(index);
this.$set(this.items, index-1, item);
},
}
}
</script>