Подтвердить что ты не робот

От AngularJS до Flux - The React Way

Как разработчик с хорошим практическим опытом AngularJS, как мне настроить мою ментальную модель написания веб-приложений в Flux с помощью React?

Я не ищу ответ Flux + React vs Angular (уже много этого онлайн), но я хотел бы знать, какие самые большие различия в двух "мыслях": заранее я был представлен в Путь Angular; относительно, что такое "Реагирующий путь"?

Как я оставлю юниверс Angular и перейду на Flux, каковы ключевые слова Мне нужно начать обращать внимание на?

Различия сначала, а теперь сходства: AngularJS очень упрям ​​и имеет очень большие нет-нет, например: не помещайте код UI/DOM в контроллеры. Каковы большие нет-нет и мнения Реакт?

И последнее, но не менее важное: Facebook ссылается на Flux как альтернативу MVC, но поскольку я смотрю на него - React - это механизм просмотра, магазины представляют собой контейнеры моделей, ориентированные на один домен, а диспетчер и действия образуют контроллер, Так разве это не MVC с другим именем?

4b9b3361

Ответ 1

Я позволю другим сделать сравнение/контраст с Angular, но вот некоторые ответы на два из ваших вопросов.

Так разве это не MVC с другим именем?

Наличие в потоке разделения проблем между уровнем данных/логики и уровнем представления не делает его MVC. Многие другие модели имеют аналогичный раскол, в первую очередь CQRS, возможно, ближайший кузен Flux. В Flux нет контроллера в смысле MVC. Действия и диспетчер не соответствуют контроллеру. Представления Controller близки, но на самом деле они довольно ограничены в плане, подобном контроллеру. Главное отличие состоит в том, что контроллеры MVC содержат логику приложения и действуют на модели. Flux хранит, напротив, всю логику приложения и не имеет настроек.

Как я оставлю юниверс Angular и перейду на Flux, каковы ключевые вещи, на которые мне нужно обратить внимание?

Основные значения Flux:

  • Простота по сложности.
  • Ментальная модель программиста по крайней мере так же важна, как и сам код.
  • Части приложения должны быть сильно развязаны и "знать" как можно меньше о других частях, насколько это возможно.
  • Инверсия управления: все элементы управления должны находиться в хранилищах, где управляется состояние. Магазины не действуют, а скорее информируются о действиях.
  • Приложения должны оставаться эластичными и гибкими по мере их роста, что позволяет быстрее и легче разрабатывать новые неожиданные функции.

Ключевые понятия в Flux:

  • Однонаправленный поток данных: Действие → Диспетчер → Магазины → Виды
    • Каждое изменение состояния и всех новых данных начинается с отправленного действия.
    • Этот четырехступенчатый поток данных является основной ментальной моделью для программиста Flux.
  • Отправка приводит к преобразованию состояния приложения в приложение.
    • Это момент времени, создающий моментальный снимок изменений. Об этом легко рассуждать.
    • Мы не можем отправлять во время отправки и сохранять эту простоту. Таким образом, любое изменение результата должно быть вызвано исходным действием.
  • Флюсовые магазины - это модели домена, а не модели ORM. Они содержат всю логику и управляют всем состоянием для определенного логического домена внутри приложения. Они могут содержать коллекции, особые значения или комбинацию обоих.
  • Flux предполагает, что производные данные, когда одно хранилище зависит от изменений в другом магазине, - это вероятность в сложных приложениях, где модели или магазины управляют нормализованными данными. Чтобы справиться с этим, диспетчер Flux должен предоставить механизм для декларативного управления этой зависимостью в хранилище. В диспетчере Facebook это делается с помощью метода waitFor(). Это позволяет одному магазину ждать другого ответа магазина на действие, прежде чем двигаться вперед со своим собственным ответом.

Основные части приложения Flux:

  • Действия: литерал объекта, содержащий новые данные и определенный тип, позволяя магазинам различать, относится ли это к их домену.
  • Диспетчер: реестр обратных вызовов, которые посредством обратных вызовов, распределяет полезную нагрузку (действие) регистраторам (магазины). У него нет собственного интеллекта. Вся разведка находится в Магазинах.
  • Магазины: модель домена, которая регистрируется с Диспетчером и испускает событие "изменения" всякий раз, когда происходит изменение его состояния.
  • Представления контроллера: просмотр компонентов рядом с корнем дерева компонентов. Они слушают события "изменения" в магазинах и реагируют на это событие, получая новые данные через хранилище, открыв методы геттера и передавая их своим детям. Единственное отличие между представлениями Controller и Views - это функция прослушивания.
  • Представления: дочерние элементы без состояния в компонентах контроллера, получающие и передающие данные, подобно чистым функциям. Представления и контрольные представления чаще всего реализуются с помощью React, поскольку он обеспечивает возможность повторной визуализации по своему усмотрению с очень небольшой потерей производительности.
  • Utils: библиотеки чистых функций, которые могут быть легко доступны для разных модулей.

Обзор по глубине: http://facebook.github.io/flux/docs/overview.html

Учебник: http://facebook.github.io/flux/docs/todo-list.html

Примеры: https://github.com/facebook/flux/tree/master/examples

Действия и диспетчер: http://facebook.github.io/react/blog/2014/07/30/flux-actions-and-the-dispatcher.html

Тестирование: http://facebook.github.io/react/blog/2014/09/24/testing-flux-applications.html

Больше в дикой природе: http://facebook.github.io/react/blog/2014/10/17/community-roundup-23.html