Вопрос, который я быстро должен был спросить, спросил себя: «Как у вас несколько контекстов в компоненте React Class?» – упреждающий текст на спасение
Я работал инженером программного обеспечения на +10 лет, где я в основном только делал Crud. В конце прошлого года я получил предложение присоединиться к компании, имеющей физический кусочек оборудования в качестве их продукта, с собственным приложением RECTATION в качестве клиента для этого оборудования. Это не затронуло меня долгую решать. Это отличная компания, с отличным видением и дорожной кармой.
Кодабельная база была не то, как я себе представил. Все компоненты были классовыми компонентами, написанными в «старом» реакцией, используя компоненты класса с .bind (это)
. Глобальный контекст, который был одним большим беспорядком. Нет Typstrctry – или пропипс для компонентов.
Шаг 1 – Очистка
Одним из моих первых запросов на тягу добавляла Typearcript и Framework Testiving и начала рефакторов большинства компонентов презентации в функциональные компоненты. В этом процессе я также добавил некоторые тесты.
Шаг 2 – Cleanup App.js
Шаг 2 раскал огромную (~ 800 строк, включая глобальный AppContext) App.js
на несколько компонентов и отделение AppContext в файл по нему. После этого все приложение начало работать намного лучше. Шаг 2 теперь сделал.
Шаг 3 – Очистка AppContext
Код уже начал выглядеть лучше. Приложение выступило лучше. Следующим шагом было немного больше чистки в AppContext. Я хотел извлечь некоторые из AppContext в отдельные контексты – у меня есть меньше строк и много файлов, чем один очень большой файл со многими строками.
Один вопрос, который я быстро должен был спросить, спросил себя: «Как у вас несколько контекстов в компоненте React Class?». Я провожу некоторое время на чтение на это и не понравился подход, который был упомянут в Реагистрационная документация – потребление нескольких контекстов Отказ Я ленивый разработчик, и это казалось, что слишком много работы и трудно поддерживать.
Раньше я работал с Redux и думал, что смогу использовать тот же подход, что и redux. Используйте компонент более высокого порядка, чтобы ввести контекст в реквизиты компонента.
Вместо того, чтобы сделать новый HOC для каждого контекста, я хотел, чтобы некоторые дженерики могли быть использованы для всех моих новых контекстов и всех компонентов.
Шаг 4 – Сотверните
Так как я должен пойти о создании этого. Я хотел ввести значения контекста в компонент – эта часть была понятной.
Позвольте мне представить упреждающую текст
import React, { useContext, ComponentType, Context, Component } from 'react' export const withContext =>(contextName: string, context: Context , WrappedComponent: ComponentType ) => (p: Props) => { return ( ) }
Пример
class MyClassComponent extends Component { render() { return (This is my class component ) } } export default withContext( 'connection', ConnectionContext, MyClassComponent )
Это работает очень хорошо и очень легко реализовать.
- Первый параметр HOC – это имя опоры, которое должно иметь контекст.
- Второе имя параметра является фактическим контекстом
- Третий параметр – это компонент, который должен быть введен в контекст.
Вывод
Использование сcontext
позволит мне захватить this.proops.Connection.isonly
Чтобы проверить, подключен ли телефон к Интернету или нет. Чтобы ввести несколько контекстов в мой компонент, я могу использовать что-то вроде составить
на петлю через все сcontext
и применить их ко всем моим классам компонентов.
Оригинал: “https://dev.to/arelstone/seeing-the-light-with-react-context-in-classes-multiple-react-context-in-class-a-component-447d”