Рубрики
Без рубрики

Как развить свои оперативные сверхдержавы с помощью шаблона HOC

Привет всем! ? Я надеюсь, что у вас было веселое, счастливое Рождество и с новым годом! 2018 достиг своего конца, и мне имеет смысл начать новый год со статьей о компонентах более высокого порядка! Я обещал вам написать об этом, так как мы приблизились к

Автор оригинала: FreeCodeCamp Community Member.

Привет всем! ? Я надеюсь, что у вас было веселое, счастливое Рождество и с новым годом!

2018 достиг своего конца, и мне имеет смысл начать новый год со статьей о компонентах более высокого порядка!

Я обещал вам написать об этом с тех пор, как мы приблизились к теме, когда мы говорили о рендерингах и узорах контейнера, поэтому имеет смысл глубоко погрузиться и уделять ему внимание!

Лично это не один из моих любимых узоров, но это мощный инструмент для знания, мастера и повесить на ваш ремень инструмента.

Просто имейте в виду, что вы не должны обрываться этим. Почти все, что вы можете инкапсулировать в HOC, вы, безусловно, можете реализовать с помощью рисунка рендеринга – проверьте мою статью о рендерингах здесь – и наоборот.

01. Что такое компонент более высокого порядка?

Компонент более высокого порядка (HOC) – это передовая техника в реакции для повторного использования логики компонентов. HOCS не являются частью API RACT. Это шаблон, который связан с природой React, что привилегирует состав на наследство.

JavaScript – это хорошо подходящий язык для функционального программирования, поскольку он может принимать функции высшего порядка. Функция более высокого порядка – это функция, которая может предпринять другую функцию в качестве аргумента и/или возвращает функцию в результате.

Точно так же, а Компонент более высокого порядка это функция, которую берет (обертывание) компонент и возвращает новый компонент Отказ

Функции высшего порядка позволяют нам арендовать действиями, а не только значениями.

HOCS распространены в сторонних битах React Libs, таких как Redux или React Router. Бьюсь об заклад, вы использовали некоторые из них, может быть, не осознавая это.

Основная цель компонента более высокого порядка в реакции состоит в том, чтобы обмениваться общими функциями между компонентами без повторяющегося кода.

02. Типы компонентов высшего порядка

В основном существует два основных типа реализации HOC: Реквизит прокси и Инверсия наследования Отказ

Прокси-прокси (PPPOC)

Прокси-процедуры прокси элементарно выражены так:

Это не что иное, как функция, пропспроксии, что получает компонент в качестве аргумента (в этом случае мы называли аргументом WROPPONCOMPONENT) и возвращает новый компонент с зарпущенным коммунтом внутри.

Имейте в виду, что когда мы возвращаем зарпутанныеКомпонент, мы также проезжаем через реквизит, что HOC получает. Это объясняет имя, данное этому типу: реквизит прокси Отказ

Когда мы возвращаем обернутую компонент, у нас есть возможность манипулировать реквизитами и абстрактным состоянием, даже проходящим состояние в качестве опоры в обернутую компонент.

Вы также можете обернуть обернутный компонент с другими элементами JSX, изменяющими его UI в соответствии с вашими потребностями приложений.

Прокси-процессы полезны для следующих ситуаций:

  1. Манипулирующий реквизион
  2. Доступ к экземпляру через Refs (будьте осторожны, Избегайте использования Refs )
  3. Абстрагированное состояние
  4. Обогащение/состоит в том, чтобы составить зарпущенные коммунты с другими элементами

Инверсия наследования (IIHOC)

Инвертированные интенсивные HOCS элементарно выражены так:

В этой ситуации возвращенный класс расширяется ЗавернутыйОкомпонент. Это называется инверсией наследования, потому что вместо зарпущенного комплимента расширяется какой-то класс Enhancer, он пассивно расширен. Таким образом, отношения между ними кажутся обратная Отказ

Инверсия наследования дает HOC доступом к зарпущенному примеру через это , что означает, что вы можете использовать состояние, реквизит, компонентный жизненный цикл и Даже метод рендера Отказ

Инверсионные наследования HOC полезны для следующих ситуаций:

  1. Оказать угон
  2. Манипулирующий государство

03. Грязные руки

Хорошо, все? Чтобы проиллюстрировать немного концепции, представленные выше, давайте сделаем какой-то код.

Если вы хотите играть позже с кодом, который мы делаем, вы можете вытащить его здесь из этого репо мой ?.

Давайте попробуем реализовать компонент, который возвращает приветственное сообщение в соответствии с пользователем, который вошел в систему.

Я настроил мою компонент App.js, чтобы показать какой-то текст и сделать компонент, называемый Holding, к которому я пропускаю пользователя Prop.

Хорошо, мы можем сделать это с простой компонентом, как это:

Но…

Что, если я хочу, чтобы компонент вернуть добро пожаловать гость, если пользователь не вошел в систему?

Ну … Я могу сделать это в том же приветственном компоненте, с простым, если это проверяет, существует ли пользователь PROP и если не это просто возвращает «приветственный гость».

Но давайте предположим, что я хочу инкапсулировать эту логику для использования с несколькими/разными приветственными компонентами.

Поэтому способ пойти – сделать реквизит прокси HOC:

Что мы здесь сделали? Мы сохранили наш приветственный компонент простой, и мы создали функцию JavaScript, называемую Enuser, которая получает приветственный компонент (WROPPONCOMPONENT) в качестве аргумента и проверяет, существует ли пропорочный пользователь. Если это не так, просто возвращает простой «приветственный гость!» сообщение.

Это очень полезно. Представьте себе, что у вас было 30 приветственных компонентов на разных языках (глупое примеру, но это делает точку зрения инкапсулировать логику в HOC).

Хорошо, так что теперь у нас есть HOC, чтобы проверить, есть ли пользователь, вошел в систему, в противном случае он бросает приветственное гостевое сообщение!

Давайте представимся, что информация о пользователе исходит с внешнего API (например, AUTH0) и попадает в наше приложение Frontend через redux Reider, который управляет состоянием приложения.

Поэтому перед проверкой, если есть пользователь, нам нужно проверить, загружаются ли данные в систему!

Ух ты! Таким образом, мы могли бы показать сообщение загрузки, пока данные не загружены!

Итак … Для этого использования я думаю, что мы хотим сделать какую-то оболочку и сделать еще одну вещь, если данные не загружаются.

Для защиты от угона нам нужно использовать II HOC. Ух ты! Такое совпадение! Итак, давайте сделаем это и сочиняем двух HOC вместе всех? Это сильно ударило на голову гвоздь.

Обратите внимание на то, что мы сделали:

Мы создали сердечник IIHOC, который расширяет зарпущенную компанию. Таким образом, он может получить доступ к его реквизиту и вызвать другой рендеринг.

В этой ситуации мы получаем загрузку опоры, и если он не загружен, мы просто вернемся на загрузку сообщения! В противном случае мы позволяем зарпущенным коммунтом рендеринга просто вернувшись Super.render ().

В экспортной операторе мы просто составляем два функция JavaScript, такие как F1 (F2 (F3))). Ничего больше, чем это!

Есть инструменты для создания функций более красивее, но это еще одна история для другой статьи!

04. Последнее, но не менее важное

Я пытался использовать простые примеры для вас, чтобы понять концепции самым чистым способом.

Мой совет для вас – это то, что если вы не освоите эти концепции, пожалуйста, потяните мое репо здесь И играть с ним немного.

Проверьте код и попробуйте понять его линию по строке.

Требуется некоторое время, чтобы привыкнуть к тому, чтобы привыкнуть и чувствовать себя комфортно.

Также, как я уже говорил раньше, все, что мы сделали здесь, могут быть достигнуты с рендерингом реквизита или контейнером, поэтому не обязательно выбрать HOC или два, чтобы сделать чистый код с такого рода капсулирования!

Я надеюсь, что у вас было так же весело читать эту статью, так как я пишут! Если вам действительно понравилось, пожалуйста, дайте мне несколько хлопьев (не менее 50, пожалуйста)? И всегда помню, чтобы «быть сильным и кодом!»

Кроме того, если вы хотите более глубокие и сложные объяснения, пожалуйста, не стесняйтесь читать ссылки, которые я добавил в раздел библиографии ниже?

05. Библиография

  1. Реагистрационная документация

2. Красноречивый JavaScript

3. Реагировать более высокий заказ компонентов в глубине

Большое спасибо!

Очевид, декабрь 2018