Выбор ответа Middle Ref и DOM обновлено

Ссылки на элементы списка

Вопрос

Нужно прокручивать к любой карточке списка неизвестной длины. Как правильно получить ссылки на все элементы?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Хранить в ref объект Map, заполняя его ref-колбэками. Хуки нельзя вызывать в цикле: количество вызовов должно быть одинаковым на каждом рендере.

Варианты ответа

  1. Вызвать useRef для каждого элемента внутри map
  2. Хранить в ref объект Map, заполняя его ref-колбэкамиправильный ответ
  3. Сохранять узлы в state через ref-колбэк каждого элемента
  4. Использовать document.querySelectorAll прямо в рендере

Разбор

Хуки нельзя вызывать в цикле: количество вызовов должно быть одинаковым на каждом рендере. Одна Map в ref и ref-колбэк на каждом элементе решают задачу. Узлы в state вызовут лишние рендеры. Запрос DOM в рендере читает прошлое состояние и смешивает рендер с побочными эффектами.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме