TGViewer
Заметки Андрея Романова Заметки Андрея Романова @andrew_r_notes · 1.23K subscribers
Post #82 4.12K
Реакт очень популярен. Из-за этого многие новички используют его неправильно, не понимая, какую задачу он решает.

Основные задачи, которые нужно решить при разработке веб-приложения:
— управление состоянием приложения;
— общение с сервером;
— роутинг (изменение урла при переходах между страницами);
— разработка интерфейса. ← за это отвечает Реакт

Как видите, Реакт отвечает только за построение интерфейса. Реакт не отвечает за программирование бизнес-логики. Реакт не отвечает за роутинг. Реакт не отвечает за общение с сервером. Из всего этого вытекает несколько простых правил.

Не пишите бизнес-логику в Реакт-компонентах. Логика приложения должна быть скрыта в отдельном модуле, который предоставляет наружу простой и декларативный API, которым можно пользоваться даже через консоль, без UI.

Не используйте Реакт для роутинга. React Router это очень популярная библиотека с нескольким десятком тысяч звёзд на Гитхабе, но серьёзно, она провоцирует разработчиков творить ужасные вещи. Она заставит вас нарушить предыдущий пункт и писать бизнес-логику в компонентах. Она заставит вас относиться к URL как к ещё одному источнику состояния приложения. Она заставит вас смешать вёрстку и настройки роутера (а в четвёртой версии появляется возможность раскидать настройки роутера вообще по всему приложению). Роутинг быть скрыт в отдельном модуле. URL должен зависеть от состояния приложения, а не наоборот. Это значит, что URL должен меняться автоматически при изменении состояния приложения. Обращаться к URL для чтения каких-то данных нельзя вообще никогда, кроме момента инициализации приложения (в момент инициализации можно использовать данные из URL для задания исходного состояния приложения).

Не используйте Реакт для общения с сервером. Серьёзно, есть компоненты вроде <Fetch url='...' /> — пожалуйста, не делайте так. За общение с сервером должен отвечать отдельный модуль, скрывающий детали реализации и предоставляющий абстрактный API вроде articles.get({ id: 1 }).then((article) => {}).
More from @andrew_r_notes
  1. Dec 31, 2025С наступающим 2026 Пришло время подвести итоги года, в очередной раз делюсь новостями и ре…
  2. Feb 23, 2025Мониторинг падений браузера В рабочем чате недавно интересовались, можно ли как-то отследи…
  3. Dec 31, 2024С наступающим 2025 Давно ничего не писал, собрался с силами и вернулся к давно забытому жа…
  4. Feb 20, 2022Как упростить кодревью Делюсь проверенными на личном опыте способами упростить ревью вашег…
  5. Jun 2, 2021Список сделанных рабочих задач Рутинная, но крайне полезная практика — ведение списка сдел…
  6. Jan 12, 2021​Подход Fail Fast В разработке есть довольно здравые и широко применимые подходы, о которы…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →