Храните значения, отвечающие за цвет текста, в родительском компоненте, можно вместе с остальными данными:
const [ items, setItems ] = useState([
{ id: ..., text: '...', active: false },
{ id: ..., text: '...', active: false },
...
]);
Тогда сброс этих значений оказывается делом тривиальным:
const reset = () => setItems(items.map(n => ({ ...n, active: false })));
<button onClick={reset}>reset</button>
Ну а переключение значений изнутри экземпляров компонента Text придётся переписать. Сделаем функцию, которая принимает id, и изменяет соответствующий элемент:
const toggle = id => setItems(items.map(n => n.id === id ? { ...n, active: !n.active } : n));
Передадим эту функцию в экземпляры компонента Text:
{items.map(n => <Text key={n.id} {...n} toggle={toggle} />)}
Назначим её в качестве обработчика клика:
const Text = ({ id, text, active, toggle }) => (
<p
className={active ? 'active' : ''}
onClick={() => toggle(id)}
>
{text}
</p>
);
Всё.