Избегайте повторения себя централизирующими пропипс
Есть три популярных способа обработки типов в реакции: Пропорпы , TeampScript и Поток . Этот пост о пропипсе, которые в настоящее время являются наиболее популярными.
? Для действующих типов в реакции я обычно использую … # Дереат RT ценится
Поскольку пропипсы предоставляют виды предупреждений во время выполнения, это полезно быть как можно более конкретным.
- Компонент принимает объект? Объявить форму объекта.
- PROP принимает только определенный список значений? Используйте однозначность.
- Массив должен содержать цифры? Использовать arrayof.
- Вы даже можете объявить свои собственные виды. Airbnb предлагает много дополнительных пропорций Отказ
Вот пример проптипа:
UserDetails.propTypes = {
user: PropTypes.shape({
id: PropTypes.number.isRequired,
firstName: PropTypes.string.isRequired,
lastName: PropTypes.string.isRequired,
role: PropTypes.oneOf(['user','admin'])
};В реальных приложениях с большими объектами это быстро приводит к большому количеству кода. Это проблема, потому что В реакции вы часто проходите один и тот же объект для нескольких компонентов Отказ Повторение этих деталей в нескольких компонентных файлах разбивает Сухой принцип (Не повторяйте себя). Повторяя себя создает проблему на техническое обслуживание.
Решение? Централизовать свои пропорты Отказ
Вот как централизовать пропорциональные
Я предпочитаю централизующиеся пропорциональные пропорции в/тыпс/index.js.
Я использую именованные импорт в строке 2, чтобы сократить декларации. ?
И вот как я использую проптип, который я заявил выше:
// types/index.js
import { shape, number, string, oneOf } from 'prop-types';
export const userType = shape({
id: number,
firstName: string.isRequired,
lastName: string.isRequired,
company: string,
role: oneOf(['user', 'author']),
address: shape({
id: number.isRequired,
street: string.isRequired,
street2: string,
city: string.isRequired,
state: string.isRequired,
postal: number.isRequired
});
});Я использую именованный импорт, чтобы получить ссылку на экспортируемую декларирую пропиртп в строке 2. И я положил его в использовании на линии 13.
Преимущества :
- Централизованный проптип радикально упрощает пропорциональную декларацию компонента. Линия 13 Просто ссылается на централизованный проптип, поэтому легко прочитать.
- Централизованный тип объявляет только форму, поэтому вы все равно можете пометить опоры по мере необходимости по мере необходимости.
- Нет больше копирования/вставки. Если форма объекта меняется позже, у вас есть одно место для обновления. ?
Вот a Рабочий пример на CodeSandbox Отказ
Дополнительный кредит: генерировать свои пропиты
Наконец, рассмотрите возможность написания какого-то пользовательского кода для создания своих объявлений пропорционалов от вашего сервера кода. Например, если ваша API написана с использованием сильно напечатанного языка, такого как C # или Java, рассмотрите генерацию пропорциональных объявлений как часть процесса сборки API на стороне сервера, чтение формы ваших классов на серверу. Таким образом, вам не нужно беспокоиться о том, чтобы сохранить свои клиентские опоры и ваш код API на стороне сервера в синхронизации. ?
Side-Note : Если вы знаете проект, который делает это для любых языков на стороне серверов, пожалуйста, ответьте в комментарии, и я добавлю ссылку здесь.
Редактировать : Вы можете конвертировать JSON в пропипп, используя transform.now.sh Отказ ?
Резюме
- Объявить свои пропорты как можно более четко, так Вы знаете, когда вы допустили ошибку.
- Централизовать свои пропорты, чтобы не повторять себя.
- Если вы работаете на сильном наведенном языке на сервере, рассмотрите возможность создания своих пропинцев, прочитав код сервера. Это гарантирует, что ваши пропорты соответствуют вашим типам Server-Side.
Ищете больше на реакции? ⚛️.
Я был авторизован несколько курсов React и JavaScript на плютаре ( бесплатная пробная версия ).
Дом Кори автор Несколько курсов по JavaScript, React, Clear Code, .NET и многое другое на Pluralsight Отказ Он главный консультант в rectegssconsulting.com , программный архитектор в VINSolutions, Microsoft MVP и поезда разработчиков программного обеспечения на международном уровне по методике программного обеспечения, такими как интерфейс разработки и чистого кодирования. CORY Tweets о JavaScript и Front-End Development в Twitter, как @houseCor Отказ
Оригинал: “https://www.freecodecamp.org/news/react-pattern-centralized-proptypes-f981ff672f3b/”