Выбор ответа Middle Ref и DOM обновлено
Ссылки на элементы списка
Вопрос
Нужно прокручивать к любой карточке списка неизвестной длины. Как правильно получить ссылки на все элементы?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Хранить в ref объект Map, заполняя его ref-колбэками. Хуки нельзя вызывать в цикле: количество вызовов должно быть одинаковым на каждом рендере.
Варианты ответа
- Вызвать
useRefдля каждого элемента внутриmap - Хранить в ref объект
Map, заполняя его ref-колбэкамиправильный ответ - Сохранять узлы в state через ref-колбэк каждого элемента
- Использовать
document.querySelectorAllпрямо в рендере
Разбор
Хуки нельзя вызывать в цикле: количество вызовов должно быть одинаковым на каждом рендере. Одна Map в ref и ref-колбэк на каждом элементе решают задачу. Узлы в state вызовут лишние рендеры. Запрос DOM в рендере читает прошлое состояние и смешивает рендер с побочными эффектами.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.