Эта строка является вашей проблемой:
key={uuidv4()}
Почему вы создаете уникальный идентификатор для каждого рендера? Смысл идентификатора в том, что он остается неизменным между рендерами, поэтому React знает, что ему не нужно перерисовывать этот компонент в DOM.
Существует два этапа, которые происходят при изменении состояния: фаза рендеринга и фаза фиксации .
Фаза рендеринга происходит первой, и именно здесь все ваши компоненты выполняют свои функции рендеринга (то есть весь компонент в случай функционального компонента). Возвращаемый JSX превращается в узлы DOM и добавляется в виртуальный DOM . Это очень эффективно и НЕ то же самое, что ре-рендеринг фактического DOM.
На этапе фиксации новый виртуальный DOM сравнивается с реальным DOM, и любые различия, обнаруженные в реальном DOM, будут повторно
Цель React - ограничить повторные рендеры реального DOM. Это не ограничивает пересчет виртуального DOM.
Это означает, что для всего этого компонента вполне нормально запускать свой цикл рендеринга при изменении activePlace
.
Однако, поскольку вы даете совершенно новый идентификатор каждому country
на каждом цикле рендеринга, виртуальный DOM считает, что каждая страна изменилась (он использует идентификаторы для сравнения предыдущих значений DOM), поэтому все страны в реальном DOM также будут перерисованы, поэтому, вероятно, вы сталкиваетесь с проблемами с задержкой.
Идентификатор должен быть связан со страной, например, с кодом страны, а не просто случайный UUID. Если вы используете случайные UUID, сохраните их вместе со страной, чтобы всегда использовался один и тот же.