У меня есть проект React с несколькими довольно большими списками. Дошло до того, что это отрицательно сказалось на производительности, и я решил виртуализировать их, используя response-window . Преобразование было простым, но я столкнулся с проблемой, когда любое изменение элементов моего списка (размер списка, изменение свойства элемента, что угодно ...) всегда приводит к повторному монтированию всех элементов списка (а не только к повторному рендерингу).
У меня не было времени разбить это на воспроизводимый случай, поскольку приложение огромно, но я сделал следующие наблюдения:
- Все элементы списка имеют a
key
, и это подтверждается с помощью инструментов разработчика React. - Когда элемент изменяется в списке, все
keys
остаются точно такими же. - При использовании простого
map
для отображения элементов списка они не монтируются при любых изменениях. - При использовании
react-window
с одинаковыми точными элементами списка они все монтируются при любом изменении. - Родительский компонент List не перемонтируется при изменении (только перерисовывает).
Это заставило меня поверить, что именно окно реакции вызывает -монтирование, но все примеры онлайн не демонстрируют такого поведения. В сообщениях о проблемах, когда это действительно так, обычно делается вывод о том, что разработчик не предоставляет key
для своих элементов или неправильно использует key
.
Когда подобные вопросы спрашивают, что люди обычно склоняются к ответу с ответом на вопрос, что им нужно прекратить использовать анонимную функцию в качестве своего элемента, использовать React.memo, реализовать componentDidUpdate, et c ... Но это не проблема, которую я Я имею дело с . У меня есть компонент рендеринга под контролем. Это факт, что все элементы перемонтируются, даже если у них есть ключи, а ключи не меняются .
Поскольку у меня нет фрагмента кода для предоставления, Мой основной вопрос: Какой сценарий ios может привести React к повторному монтированию элемента списка, который всегда сохраняет один и тот же ключ?