Автор оригинала: Cory House.
Какие легосы могут научить нас о повторном использовании в Реагировать приложения
РЕАКТ – это библиотека компонентов. Так что реагирование позволяет легко сломать вашу UI на компоновку. Вопрос в том, Как зернисты должны быть …| ?
Давайте рассмотрим конкретный пример, который я исследовал в Предыдущий пост Отказ
Представьте себе, что ваша команда просто развернула приложение TODO, встроенное в реакции. Через месяц другая команда в вашей компании хочет запустить ваше приложение TodDo в своем приложении счета, также встроенного в реакции.
Так что теперь вам нужно запустить ваше приложение Todo в двух местах:
- Сами по себе
- Встроенный в приложение счета
Какой лучший способ справиться с этим? ?
Чтобы запустить ваше приложение React в нескольких местах, у вас есть три варианта:
- Iframe – встроить приложение Todo в приложение счета через
- Многоразовый компонент приложения – Поделитесь всем приложением Todo через NPM.
- Многоразовый пользовательский интерфейс – Поделитесь на разметку приложения Todo через NPM.
Давайте обсудим достоинства каждого подхода.
Подход 1: iframe
Самый простой и самый очевидный подход – использовать Iframe Чтобы отдать приложение TODO в приложение счета.
Но приводит к нескольким вопросам:
- Если два приложения отображают те же данные, вы рискуете их выходить из синхронизации.
- Если два приложения используют одни и те же данные, вы в конечном итоге делаете резервные вызовы API для получения одинаковых данных.
- Вы не можете настроить поведение приложения IFRAMED.
- Если другая команда владеет приложением в приложении, когда они подтолкнутся к производству, вы мгновенно пострадали.
Шинт-линией: путь прогулки. Избегайте iframes.
Подход 2: Многоразовый компонент приложения
Совместное использование вашего приложения через NPM вместо iFrame избегает проблемой № 4 выше, но другие вопросы остаются. API, Auth, а поведение все запеченные. Поэтому я не рекомендую поделиться полными приложениями через NPM. Уровень зернистости слишком высок, поэтому пользовательский опыт страдает.
Подход 3: многоразовые пользовательские интерфейсы
Я рекомендую более зернистый подход с использованием двух гибких строительных блоков:
- «Тупые» компоненты реагирования (просто интерфейс. Нет API звонит внутрь.)
- API обертки
«Тупые» компоненты реагирования настраиваются, неопираются и композимами. Они многоразовые пользовательские интерфейсы. При употреблении «тупой» компонент, как это, вы можете предоставить соответствующие данные или указать вызовы API, которое должно сделать приложение.
Однако, если вы собираетесь составить «глупые» компоненты, вам нужно подключить те же вызовы API для нескольких приложений. Вот где пригодится обертки API. Что такое обертка API? Это файл JavaScript, полный функций, которые делают HTTP вызовы на вашу API. Моя команда создает обертки API. Мы используем Axios за кулисами, чтобы сделать HTTP-вызовы.
Представьте, что у вас есть API пользователя. Вот как создать обертку API пользователя:
- Создайте файл JS с публичными функциями, такими как GetUSerbyId, AvideUser и т. Д. Каждая функция принимает соответствующие параметры и использует Axios/Fetch, чтобы сделать HTTP-вызовы на вашу API.
- Поделитесь оберткой как пакет NPM называется USERAPI.
Вот пример.
/* This API wrapper is useful because it:
1. Centralizes our Axios default configuration.
2. Abstracts away the logic for determining the baseURL.
3. Provides a clear, easily consumable list of JavaScript functions
for interacting with the API. This keeps API calls short and consistent.
*/
import axios from 'axios';
let api = null;
function getInitializedApi() {
if (api) return api; // return initialized api if already initialized.
return (api = axios.create({
baseURL: getBaseUrl(),
responseType: 'json',
withCredentials: true
}));
}
// Helper functions
function getBaseUrl() {
// Insert logic here to get the baseURL by either:
// 1. Sniffing the URL to determine the environment we're running in.
// 2. Looking for an environment variable as part of the build process.
}
function get(url) {
return getInitializedApi().get(url);
}
function post(url, data) {
return getInitializedApi().post(url, data);
}
// Public functions
// Note how short these are due to the centralized config and helpers above. ?
export function getUserById(id) {
return get(`user/${id}`);
}
export function saveUser(user) {
return post(`user/${user.id}`, {user: user});
}В моем команде мы делимся нашими комментариями React Components и API WPI как Частные пакеты на НПМ , но Артефакты это хорошая альтернатива.
Эти блоки Lego дают нам основу для быстрого строительства новых решений из многоразовых произведений.
Так что в идеале, ваш «тупой» многоразовый интерфейс UI состоит из Другие многоразовые компоненты, также поделились на NPM Действительно
С помощью многоразовых компонентов React Component и API-обертки, опубликованные NPM, это тривиально построить что-то потрясающее.
Это как щелкая кусочки Lego вместе. ?
Я исследую достоинства и недостатки подходов выше более подробной информации здесь Отказ И я недавно опубликовал комплексный курс на Создание многоразовой библиотеки React Component на PluralSight Отказ ?
У вас есть другой подход? Перезвонить через комментарии.
Ищете больше на реагировании? ⚛️.
Я был авторизован несколько курсов React и JavaScript На плютаре ( бесплатная пробная версия ).
Дом Кори автор Несколько курсов по JavaScript, React, Clear Code, .NET и многое другое на Pluralsight Отказ Он главный консультант по адресу Reactjsconsulting.com , архитектор программного обеспечения, Microsoft MVP и поезда разработчиков программного обеспечения на международном уровне по практическим практикам развития. Твиты CORY о JavaScript и Front-End Development в Twitter, как @houseCor Отказ
Оригинал: “https://www.freecodecamp.org/news/designing-reusable-react-components-1cbeb897b048/”