Моргает он потому, что в момент отрисовки старый уже удален, а новый еще не отрисован. Варианты решения:
- Убедиться точно, что новый контент загружен и лишь затем его выводить. Если контент будет слишком тяжелый для устройства клиента, то этот метод не сработает, т.к. устройству еще понадобится время для его рендера, т.е. моргание будет заметно.
- Добавить некий loading в место, где ожидается появление новых данных.
Как вариант, вместо пустого дива:
<section>
<div ref={tables} className={style.tableWrapper}>
{isLoading ? createTable(currentTable) : createTable(table)}
</div>
</section>