Основной проблемой я тут вижу то, что вы в state храните компоненты. Так не делать не надо, в state нужно хранить
данные, а из них уже рендерить нужное. Тогда вы и классы сможете гибко добавлять какие надо и что угодно.
Так же есть вопрос по key, сыпет в консоль предупреждение, что кей не уникален в самом последнем return. Во-первых, я не пойму зачем там key, во-вторых, я не пойму как это пофиксить.
Вы рендерите элементы массива (pages), и, чтобы отличать их друг от друга, Реакту нужен какой-то идентификатор (подробнее в документации). У вас он как бы есть, но, во-первых, как сказано выше, его ломает то, что вы храните в state уже отрендеренные компоненты, а во-вторых, вы в качестве ключа для всех элементов используете одно и то же значение (cardDetails.id), а оно должно быть уникальным.
как выключить двойной вызов setTimeout в dev mode
Не надо его выключать, надо корректно чистить таймауты, для отлова таких проблем двойной вызов и делают.
Видимо, вы запутались и вам кажется, что вы изучаете Next.js, а на самом деле вы изучаете React (от Next в вашем коде нет абсолютно ничего) и вам явно нужно вернуться к
документации и прочитать её от начала и до конца, там есть и ответы на ваши вопросы и примеры.