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

Новый подход к проектированию реагирования

Остин Малерба Новый подход к React Completty Designin 2015, Дэн Абрамов написал статью, презентационные и контейнеровочные компоненты, что некоторые реагируют новые желания, неправильно созданные в качестве заповедей. На самом деле, я сам наткнулся на статью, и многие другие эхо уделяют свои учения, и я подумал, что это должно быть лучшим способом

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

Остин Малерба

В 2015 году Дэн Абрамов написал статью, Председатель и контейнерные компоненты , что некоторые реагируют новые желания, неправильно инстругируют как заповеди. На самом деле, я сам наткнулся на статью, и многие другие употребляют свои учения, и я подумал, Это должно быть лучшим способом отдельных проблем среди компонентов Отказ

Но сам Дэн Абрамова позже обратился к сообществу за цепляться за рисунки проектирования, которые он изложен.

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

Удаление дихотомии

Долгое время компоненты широко классифицированы как умные, либо глупые, контейнерные или презентационные, состоятельные или невыполненные, чистыми или нечистыми. Есть много терминологии, но все они значат о том же. Умные компоненты знают, как связать, ваше приложение и тупые компоненты просто принимают данные для представления конечным пользователю. Это полезное различие, но это действительно не то, как я нахожусь мышлением при разработке компонентов.

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

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

Представляя трихотомию

Трихотомия? Это вообще слово? Я не знаю, но вы понимаете идею. Я пришел, чтобы подумать о комментариях реагирования, как падение в одну из трех буннов.

Универсальные компоненты

Это компоненты, которые можно использовать Много раз в любом приложении Отказ

Эти компоненты:

  • Должно быть многоразовый
  • Должно быть очень настраиваемый
  • Должен Не осознавать конкретный код для приложения в том числе модели, магазины, услуги и т. Д.
  • Должен Минимизировать зависимости на сторонних библиотеках
  • Следует редко быть использовано непосредственно в вашем приложении
  • Следует использовать как Строительные блоки для глобальных компонентов
  • Может закончиться суффиксом «База» (например, ButtonBase, ImageBase)

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

Глобальные компоненты

Это компоненты, которые можно использовать Много раз в одном приложении Отказ

Эти компоненты:

  • Должно быть многоразовый
  • Должно быть минимально настраиваемый
  • Может использовать конкретный код код
  • Должен Воспользуйтесь универсальными компонентами , ограничивая их настраиваемость
  • Следует использовать как Строительные блоки для просмотра компонентов
  • Часто связывают одну к одному с экземплярами модели (например, доглистицем, Catcard)

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

Они должны быть минимально настраиваются для обеспечения согласованности в вашем приложении. Приложения не должны иметь тридцать разных вариаций кнопок, а скорее должны иметь горсть разных вариаций кнопок. Это должно быть применено путем принятия высоко настраиваемого универсального компонента кнопки ButtonBase и выпечки в IT-стилях и функциональность в виде глобального компонента кнопок. Глобальные компоненты часто принимают другую форму в качестве представлений данных о модели домена.

Просмотр компонентов

Это компоненты, которые используются Только один раз в приложении Отказ

Эти компоненты:

  • Должен не быть обеспокоенным повторному времени
  • Скорее всего на управлять состоянием
  • Получить минимальные реквизиты
  • Следует связать вместе глобальные компоненты (и, возможно, универсальные компоненты)
  • Часто Разрешить маршруты приложений
  • Часто поддерживает специальный график недвижимости в области просмотра
  • Часто имеют большое количество зависимостей
  • Должно быть Строительные блоки для вашего приложения

Это самые высокие компоненты вашего приложения, которые соединяют многоразовые компоненты и даже другие виды. Это часто станут компонентами, которые разрешают маршруты и могут показать в виде компонентов уровня страницы. Они тяжелые в состоянии и света в реквизитах. Это то, что Дэн Абрамов рассмотрел бы компоненты контейнеров.

Уважание

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

Обратите внимание, как уважаемая обработка позволяет нам контролировать то, что оказать в любой точке в жизненном цикле обещания, но прибуры обещания в Teal PulseLoader во время ожидающего состояния. Теперь в любое время мы используем обещание, мы гарантируем анимацию загрузки чирок, и нам не нужно беспокоиться о дублировании этого кода или предоставлять непоследовательный опыт загрузки, включая многократные анимации загрузки нескольких цветов в нашем приложении. Уважаемая база настраивается, но обещание является ограничительным.

Структура каталогов

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

App/
  App.js
  Views/
    DogListView/
  Global/
    Models/
      Dog/
        DogListItem/
    Image/
    PromiseButton/
Universal/
  ImageBase/
  PromiseButtonBase/

Компонентные зависимости

Ниже иллюстрирует, как вышеуказанные компоненты зависят друг от друга.

/* App.js */
import { DogListView } from './Views'

/* DogListView.js */
import { DogListItem } from 'App/Global/Models/Dog'

/* DogListItem.js */
import Image from '../../Image',
import PromiseButton from '../../PromiseButton'

/* Image.js */
import { ImageBase } from 'Universal'

/* PromiseButton.js */
import { PromiseButtonBase } from 'Universal'

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

Проблема с контейнером против презентационной модели заключается в том, что она слишком трудно определить обязанности компонентов в терминах внутренней работы компонентов. Ключевым вынос является просмотр дизайна компонентов с точки зрения Компонентные интерфейсы Отказ Это имеет значение меньше реализации, которая позволяет компоненту удовлетворить его договор. Важно подумать о том, что за Настройки Компонент должен позволить и какой вид неявные и явные зависимости Компонент должен включать.

Если вы нашли эти мысли полезными и хотели бы видеть больше моих идей, не стесняйтесь проверить это репо Что я использую для поддержания моих мыслей и лучших практик для написания приложений React/Redux.