<div contenteditable="true" style="width: 200px; height: 40px; border: 1px solid gray; overflow-x: scroll; overflow-y: hidden;"></div>
<!-- Вот тут -->
<ul>
<li>номер</li></a>
<li>номер</li></a >
<li>номер</li></a >
<li>номер</li></a >
<li>номер</li></a >
</ul>
<!-- Должно быть так -->
<ul>
<li><a href="tel:+79999999999">+7 (999) 999-99-99</a></li>
<li><a href="tel:+78888888888">+7 (888) 888-88-88</a></li>
</ul>
<!-- А вот тут -->
<ul>
<a href="#"> <li>О компании</li></a>
<a href="#"> <li>Новости</li></a >
<a href="#"><li>Вакансии</li></a >
<a href="#"> <li>Отзывы</li></a >
</ul>
<!-- Так -->
<ul>
<li><a href="#">О компании</a></li>
<!-- ... -->
</ul>
React вместо чистого js мы ведь тоже используем ради того, чтобы думать о бизнес логике и реализовывать её быстрее.
Тут вам ещё axios пригодится для взаимодействия с api. Просто ввиду удобства работы. Но если буквально один запрос, то можно и fetch встроенный использовать. Если понадобится ie есть полифил. Но можно и самому через xmlHttpRequest. Тогда ничего не понадобиться. Это всегда компромис между размером итогового бандла и удобством разработки/поддержки.
Важно понимать, что в итоговый прод идут не все библиотеки, которые вы используете. Некоторые нужны только для разработки и не войдут в js который в итоге попадёт в браузер. Так же как и не всё, что вы используете на серверной стороне попадёт на прод сервера.
Например, препроцессоры будут использованы только при разработке, на выходе мы получаем css и библиотека для препроцессора нам не нужна в итоговом бандле. С тайпскрипт та же история. С линтером то же самое.
Вывод: если инструмент подходит для решения задачи и не выглядит избыточным в её контексте - используйте его:)