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

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

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

6 ответов

19 просмотров

Смысл похожий. Почитайте документацию, там как нигде хорошо описано зачем это нужно 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 поле объекта, а объект был заменен, то все поля так же были заменены, даже если значения в ним не поменялись, а значит перерисовано будет все

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта