TypeError: невозможно прочитать свойство '0' неопределенного VueJS

Я наблюдаю странную проблему с неупорядоченными / упорядоченными элементами списков VueJS и HTML. Все файлы в моем проекте создаются без ошибок, но в браузере вы ничего не видите на странице, а в консоли браузера есть ошибка.

У меня есть исправление (см. Код ниже), но мне любопытно, почему VueJS выдает эту ошибку и как VueJS обрабатывает основные элементы списка в браузере? Поэтому я надеялся, что кто-нибудь сможет объяснить мне эту проблему, чтобы полностью понять, что здесь происходит на самом деле.

Я использую Visual Studio 2019 со Snowpack для компиляции

Мой код HTML / шаблона:

<!-- The code that throws error in the browser -->
<ul>
    <li>
        Item One
    </li>
    <li>
        Item Two
    </li>
</ul>

<!-- This code fixes error in browser -->
<ul :key="someRandomKey"> <!--<ul v-bind:id="someRandomKey"> also a fix-->
    <li>
        Item One
    </li>
    <li>
        Item Two
    </li>
</ul>

Код моего компонента Vue ts:

import { Component, Prop, Vue } from '/web_modules/vue-property-decorator.js'

import vevraTemplate from '../templates/applyVEVRAA.vue.js';
@Component({ render: vevraTemplate, watch: null })
export default class VEVRAAComponent extends Vue
{
    
}

Ошибка: (имя моего компонента vue - applyVEVRAA.vue.js)  введите описание изображения здесь


person jlking    schedule 24.07.2020    source источник
comment
Это внутри v-for или transition-group?   -  person Daniel_Knights    schedule 24.07.2020
comment
У меня были другие элементы, но я удалил их и протестировал единственное, что есть на моей странице .vue, - это неупорядоченный список. Так что нет, это не внутри v-for или transition-group   -  person jlking    schedule 24.07.2020
comment
Не могли бы вы опубликовать полный код? Насколько я знаю, нет причин, по которым неупорядоченный список сам по себе может нуждаться в ключевом атрибуте.   -  person Daniel_Knights    schedule 24.07.2020
comment
Обновил мой код в исходном вопросе   -  person jlking    schedule 24.07.2020


Ответы (1)


Вы добавляете ключ к «родительскому» элементу, чтобы он мог быть идентифицирован средством визуализации Vue. Если что-то изменится, рендер знает, какие элементы нужно обновить.

В этой ссылке это объяснено лучше - ›https://www.telerik.com/blogs/in-vue-when-do-i-actually-need-the-key-attribute-and-why.

person Manuela Mercado    schedule 24.07.2020
comment
Я понимаю это, но дело не только в ключевом атрибуте. Если я обновлю код до <ul v-bind:id="someID"> Код также будет работать - person jlking; 24.07.2020
comment
id также служит идентификатором для рендеринга Vue JS. Мне интересно, используете ли вы тег <template>...</template> для включения кода шаблона или это весь код. - person Manuela Mercado; 25.07.2020
comment
Весь мой код размещен выше. Буквально единственный код, который у меня есть, - это неупорядоченный список: - \ - person jlking; 26.07.2020
comment
Я думаю, вам не хватает syntax, хотелось бы заключить шаблон в тег template, чтобы Vue знал, возможно, это может помочь - ›vuejs.org/v2/guide/typescript.html. - person Manuela Mercado; 17.08.2020