Быстрое решение состоит в том, чтобы добавить ключевую опору в ваш список:
<List key={page} page={page} />
Когда значение для страницы изменится, компонент List будет размонтирован, а новый отрендерен. В новом не будет никаких предыдущих данных, поэтому вы получите только 2 рендера вместо 3.
Это означает, что вам больше не нужно устанавливать предыдущие данные на null
.
Если вы сделаете это, вам нужно проверить, что компонент все еще смонтирован в вашем useEffect
перед вызовом setItems
, в противном случае вы будете пытаться установить состояние на размонтированном компоненте. Вы можете написать:
if(setItems) {
setItems(data)
}
Изменение ключевого реквизита немного странно, поэтому я бы рассмотрел другие способы решения вашей проблемы.
Возможно, вам следует вместо этого передать данные в список списка, отвечающего за выборку данных, и состояния страницы и данных внутри родительского компонента?
Пока что изменение ключа с помощью страницы должно работать.