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

Всем доброго вечера. Помогите с нубским вопросом. При отрисовке списков

при помощи директивы v-for, на что именно влияет key? По React помню, что не указывать key плохая идея, а указывать в качестве ключа индекс элемента - еще хуже. Key используется для уникального определения элементов в списке, на сколько я знаю. Знает кто, как поведет себя Vue, если в списке будут два элемента с одинаковым key или же key вообще опустить?

6 ответов

9 просмотров

Смысл похожий. Почитайте документацию, там как нигде хорошо описано зачем это нужно https://ru.vuejs.org/v2/api/#key

Андрей- Автор вопроса

Документацию, разумеется, прочитал. Только там довольно поверхностно, как по мне. Интересует несколько более практическое и глубокое понимание. А именно: Если ключ отсутствует на списке, то Vue будет заново рендерить весь список при изменении любого элемента? Либо же будет пытаться сравнить элементы с виртуальным DOM? И если ключи совпадают, то Vue пропустит элемент и оставит в нем предыдущее состояние?

Если вы хотите разобраться то предлагаю вам создать отдельный компонент, который на вход будет принимать свой порядковый номер. В каждом хуке выводите в console.log(порядковый номер). В цикле выведите несколько значений из списка. В качестве key укажите порядковый номер. А в родительском элементе попробуйте поменять список. Потом оберните все в transition-group. И посмотрите как все меняется.

https://codesandbox.io/s/brave-shape-2vn0y?file=/src/App.vue Понажимайте на кнопку. Измените значение key на что-то уникальное, например на item.msg

Андрей- Автор вопроса

Т.е. принцип тот-же, если меняется список, а в качестве ключа стоит индекс(или ключ не указан), то удаляется последний элемент, а остальные обновляются, верно?

key позволяет vue определять, что именно нужно перерисовать. без key может быть перерисовано больше, чем нужно. еще у key много разных кейсов, которые работают не так, как нужно. например, если в key поле объекта, а объект был заменен, то все поля так же были заменены, даже если значения в ним не поменялись, а значит перерисовано будет все

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

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

Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
75
Коллеги, доброе утро. Запустил на удаленном хосте приложение (ручками зашел туда по ssh и запустил, не командой удаленно). Создал потом ssh-туннель, и с моей машины приложение...
Δημήτηρ
9
Всем привет, подскажите/посоветуйте пожалуйста. Фаердак компоненты, имею одно место где бизнес хочет видеть при открытии формы список всех клиентов, это порядка 30к. Мои дово...
Sasha Sch
14
Ребят, если кто в курсе - скажите, а в загранке такое же засилье маркетплейсов? или там простые сермяжные интернет-магазины живут попроще?
Андрей [aharito] Харитонов
11
Хотел бы спросить у знающих, правильную ли я выбрал книгу для начала изучения ассемблера Юрова В.И ? Или есть более лучшие книги для начала обучения?
Botsman
31
А как лучше конвертировать физический адрес в виртуальный при маппинге? В случае ядра у меня, например, direct mapping, первые 768МБ я как есть мапплю в higher half, а остальн...
Evg Resh
10
$params = [ 'formid' => 'feedbackForm', 'formTpl' => '@CODE: <form class="form-validate" data-id="ajax_form"> <fieldset class="margin-bottom-md"> ...
Pathologic
1
Книга Юрова В.И пойдёт для обучения?
Botsman
24
I was reading a lot about API and REST API and I still don't get it, what's a application programming interface? 😄 How to build a private API for getting other informations f...
Witold 🖤🩶
12
Всем доброго дня, ребят подскажите пожалуйста, если в курсе по ассемблеру используется MASM32, могу ли я использовать FASM? В чем явная разница и будет ли у меня все работать?
Botsman
17
Карта сайта