Несколько дней назад меня перевели в новый отдел. Мой новый коллега дал мне задание провести рефакторинг существующего проекта React.
Когда я читал код, я был шокирован способом использования Context API. Программист, который раньше помещал все (да, почти все) в объект Context, рассматривал его как хранилище для управления всеми состояниями и даже некоторым локальным временным состоянием. Это безумие!
А ещё он кодирует всё для страницы всего в одном (да, абсолютно одном) компоненте в одном .ts файле. Мне так сложно объяснить логику кода. Но я все равно принимаю этот дерьмовый код (у меня нет выбора), поэтому принимаю важное решение: я бы переписал все эти страницы за одну неделю с помощью Mobx и разбил бы код на разные функциональные компоненты.
С помощью Mobx я создаю несколько магазинов для обработки всех данных из API и разделяю один огромный компонент на несколько маленьких частей; все начинает становиться ясным и простым. Локальное состояние должно находиться в области действия, где оно будет использоваться, общая часть будет получена из хранилища Mobx.
Наконец-то я полностью удалил объект Context, тысячи строк кода были удалены, и мир снова воцарился!
Я хочу сказать кое-что о Context API. Если у вас действительно есть что-то, например глобальная информация о конфигурации, которой можно поделиться со всем приложением, вы можете использовать Context API. Но если вы просто хотите избежать использования какой-либо сторонней библиотеки управления состоянием, это плохая идея рассматривать контекст как замена.
Пусть Контекст будет Контекстом и пусть состояние управляется такими библиотеками, как Mobx.
Прекратите злоупотреблять React Context API, пожалуйста!
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3