Выбор ответа Middle Списки и производительность обновлено
FlatList: extraData
Вопрос
Строка списка подсвечивает выбранный элемент по selectedId из состояния экрана. Выбор меняется, а подсветка нет. Почему?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: selectedId не входит в data; его нужно передать в extraData. FlatList это PureComponent: если data и остальные пропсы не изменились по ссылке, он не вызывает renderItem заново.
Варианты ответа
selectedIdнужно хранить в Redux, иначеFlatListего не увидит- Подсветку элементов в
FlatListнельзя менять без полной перезагрузки списка - Нужно вызвать
forceUpdateу каждой строки после изменения выбора selectedIdне входит вdata; его нужно передать вextraDataправильный ответ
Разбор
FlatList это PureComponent: если data и остальные пропсы не изменились по ссылке, он не вызывает renderItem заново. Значения из замыкания renderItem (например, selectedId) список не отслеживает. extraData={selectedId} сообщает, что нужно перерисоваться. Redux и forceUpdate не решают причину.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.