Выбор ответа Middle Списки и производительность обновлено

FlatList: extraData

Вопрос

Строка списка подсвечивает выбранный элемент по selectedId из состояния экрана. Выбор меняется, а подсветка нет. Почему?

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

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

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

Коротко

Правильный ответ: selectedId не входит в data; его нужно передать в extraData. FlatList это PureComponent: если data и остальные пропсы не изменились по ссылке, он не вызывает renderItem заново.

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

  1. selectedId нужно хранить в Redux, иначе FlatList его не увидит
  2. Подсветку элементов в FlatList нельзя менять без полной перезагрузки списка
  3. Нужно вызвать forceUpdate у каждой строки после изменения выбора
  4. selectedId не входит в data; его нужно передать в extraDataправильный ответ

Разбор

FlatList это PureComponent: если data и остальные пропсы не изменились по ссылке, он не вызывает renderItem заново. Значения из замыкания renderItem (например, selectedId) список не отслеживает. extraData={selectedId} сообщает, что нужно перерисоваться. Redux и forceUpdate не решают причину.

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

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

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