В этой статье мы рассмотрим, как избавиться от React.Context в ваших приложениях, и найдем для этого мотивацию.
Вы, вероятно, знакомы с React и, возможно, уже имели опыт работы с React.Context, если вы попали на эту статью, но если нет, все равно не стесняйтесь ее прочитать и поделиться с людьми, которым это может быть интересно.
Контекст ухудшает читабельность, запутывает и ограничивает приложение.
Просто взгляните на этот простой пример:
Выглядит не слишком понятно и достоверно, не так ли?
Вот некоторые потенциальные проблемы при использовании контекстов:
Забавный факт: всем известный «ад обещаний» похож ?♂️
loadClients() .then((client) => { return populate(client) .then((clientPopulated) => { return commit(clientPopulated); }); });
Вместо этого создайте перехватчики.
Давайте заменим ThemeContext из примера выше на собственный хук useTheme:
import { useAppEvents } from 'use-app-events'; const useTheme = () => { const [theme, setTheme] = useState('dark'); /** Set up communication between the instances of the hook. */ const { notifyEventListeners, listenForEvents } = useAppEvents(); listenForEvents('theme-update', (themeNext: string) => { setTheme(themeNext); }); const updateTheme = (themeNext: string) => { setTheme(themeNext); notifyEventListeners('theme-update', themeNext); }; return { theme, updateTheme, }; };
Мы использовали пакет npm под названием use-app-events, чтобы позволить всем экземплярам хука useTheme взаимодействовать для синхронизации состояния их темы. Это гарантирует, что значение темы будет одинаковым при многократном вызове useTheme в приложении.
Более того, благодаря пакету use-app-events тема будет синхронизироваться даже между вкладками браузера.
На этом этапе ThemeContext больше не нужен, поскольку хук useTheme можно использовать в любом месте приложения, чтобы получить текущую тему и обновить ее:
const App = () => { const { theme, updateTheme } = useTheme(); updateTheme('light'); // Output:Current theme: lightreturnCurrent theme: {theme}; }
Каковы плюсы подхода:
Некоторое время назад React.Context, конечно, был мощным инструментом, но хуки обеспечивают более контролируемый и надежный способ управления глобальным состоянием вашего приложения, если они правильно реализованы в сочетании с пакетом use-app-events.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3