Реагировать на пункты списка с перемонтированием ключей - PullRequest
0 голосов
/ 07 февраля 2020

У меня есть проект React с несколькими довольно большими списками. Дошло до того, что это отрицательно сказалось на производительности, и я решил виртуализировать их, используя response-window . Преобразование было простым, но я столкнулся с проблемой, когда любое изменение элементов моего списка (размер списка, изменение свойства элемента, что угодно ...) всегда приводит к повторному монтированию всех элементов списка (а не только к повторному рендерингу).

У меня не было времени разбить это на воспроизводимый случай, поскольку приложение огромно, но я сделал следующие наблюдения:

  • Все элементы списка имеют a key, и это подтверждается с помощью инструментов разработчика React.
  • Когда элемент изменяется в списке, все keys остаются точно такими же.
  • При использовании простого map для отображения элементов списка они не монтируются при любых изменениях.
  • При использовании react-window с одинаковыми точными элементами списка они все монтируются при любом изменении.
  • Родительский компонент List не перемонтируется при изменении (только перерисовывает).

Это заставило меня поверить, что именно окно реакции вызывает -монтирование, но все примеры онлайн не демонстрируют такого поведения. В сообщениях о проблемах, когда это действительно так, обычно делается вывод о том, что разработчик не предоставляет key для своих элементов или неправильно использует key.

Когда подобные вопросы спрашивают, что люди обычно склоняются к ответу с ответом на вопрос, что им нужно прекратить использовать анонимную функцию в качестве своего элемента, использовать React.memo, реализовать componentDidUpdate, et c ... Но это не проблема, которую я Я имею дело с . У меня есть компонент рендеринга под контролем. Это факт, что все элементы перемонтируются, даже если у них есть ключи, а ключи не меняются .

Поскольку у меня нет фрагмента кода для предоставления, Мой основной вопрос: Какой сценарий ios может привести React к повторному монтированию элемента списка, который всегда сохраняет один и тот же ключ?

...