Понимание структуры потока


12

Я на самом деле изучаю структуру потока, и есть кое-что, что я не могу понять относительно магазинов .

Что именно они?

Я прочитал много статей, и кажется, что это касается области.

Означает ли это, что это «абстрактная» часть, относящаяся к вызовам API или серверным вызовам?

Это не очень понятно для меня.

Редактировать: это может быть то же самое, что угловая фабрика? Получение удаленных данных, создание бизнес-задачи или сохранение некоторых состояний приложения (например, текущий пользователь подключен)?


1
Ссылка на то, о чем именно вы говорите, была бы полезна. Вы имеете в виду этот "образец потока"? fluxxor.com/what-is-flux.html
DougM


Flux - это не что иное, как шаблон публикации / подписки с ограничением, что все данные сначала проходят через диспетчер. Это гарантирует, что данные не возвращаются назад (и вызывают путаницу). Такие вещи, как «Магазин», «Действие» и т. Д. - это просто еще один способ обозначить компоненты системы и данные, которые передаются.
kiwicomb123

Ответы:


23

Хорошо, позвольте мне объяснить вам шаг за шагом

1 Что такое флюс?

  • Шаблон
  • Централизованный диспетчер
  • Однонаправленные потоки данных
  • Пункт списка

Они также называют это потоком по причине.

Реализация Flux

  • Флюс Facebook
  • Alt
  • рефлюкс
  • смущать
  • NuclearJS
  • плавкий

введите описание изображения здесь

Чат с Flux

Реагируйте : Эй, Действие, кто-то нажал эту кнопку «Сохранить курс».

Действие : Спасибо, Реакт! Я зарегистрировал создателя действия у диспетчера, поэтому диспетчер должен позаботиться об уведомлении всех магазинов, которые его интересуют.

Диспетчер : Позвольте мне посмотреть, кому небезразлично сохранение курса. Ах! Похоже, что Магазин зарегистрировал обратный звонок со мной, поэтому я дам ей знать.

Магазин : Привет диспетчер! Спасибо за обновление! Я буду обновлять мои данные с учетом полезной нагрузки, которую вы отправили. Затем я отправлю событие для компонентов React, которые заботятся.

Реагировать : Ооо! Блестящие новые данные из магазина! Я обновлю интерфейс, чтобы отразить это!


Flux API


register (функция callback) - «Эй, диспетчер, запусти меня, когда произойдут какие-то действия. -Хранить"

unregister (string id) - «Эй, диспетчер, перестань беспокоиться об этом действии. -Хранить"

waitFor (array ids) - «Сначала обновите этот магазин. -Хранить"

рассылка (объект полезной нагрузки) - «Эй, диспетчер, расскажи магазинам об этом действии. -действие»

isDispatching () - «Я сейчас занят отправкой обратных вызовов».

поэтому вопрос, поднятый в нашем уме

Итак, Flux - модель публикации и подписки?

Не совсем.

Отличается двумя способами:

1. Каждая полезная нагрузка отправляется всем зарегистрированным обратным вызовам.

2. Обратные вызовы могут ждать других обратных вызовов.

Резюме

Flux - это шаблон для однонаправленных потоков данных. Действия инкапсулируют события. Dispatcher - это центральный хаб, который содержит обратные вызовы. Хранит состояние приложения. Многие реализации.


Моя первая проблема заключается в том, что состояние позволяет приложению иметь разные данные удаленных объектов API: - /
mfrachet

что вы подразумеваете под государством позволяет? где бы ни вызывало изменение, оно будет называться React View и снова вызываться методом изменения состояния
Dhaval Patel 9.09.15

Признавая, что я создаю приложение с потоком. Я имею дело с API, а затем сохраняю данные в своих магазинах. Что если пользователи модифицируют удаленные данные? У меня будет разница между клиентом и сервером
mfrachet

где я могу найти почему? Если все диспетчер и хранилище собираются сделать это для просмотра вперед, то почему действие не может обновить представление напрямую. почему есть посредники
Мухаммед Умер

@MuhammadUmer: Dispatcher - один для приложения, а хранилище основано на компоненте в приложении, поэтому для устранения избыточности были представлены посредники
Dhaval Patel

1

Рассматривая простой пример ( https://github.com/facebook/flux/tree/master/examples/flux-todomvc/ ), «магазины управляют состоянием приложения для определенного домена в приложении.« То есть они содержат данные о состоянии аспекта приложения и весь код для его изменения. Всякий раз, когда есть новое обновление от Диспетчера, все Магазины видят его, они решают, как обновить свои данные в ответ, и затем они уведомляют Представления, что данные изменились. В примерах хранилища содержат такие вещи, как «список невидимых потоков» (где диспетчер уведомляет их о том, что новое сообщение поступило или прочитано старое, а представления отображают потоки сообщений для пользователя) и «текущее время воспроизведения и государство."

С технической точки зрения: это промежуточный уровень инфраструктуры, который регистрирует обратные вызовы с помощью Dispatcher для получения обновлений, а затем уведомляет представления при изменении состояния данных. (Затем представления могут отправлять действия обратно в Dispatcher.) Они реализуют абстрактный интерфейс, в котором каждое хранилище регистрирует обратный вызов с помощью Dispatcher и передает события в представления, но каждое хранилище, по-видимому, представляет определенный домен конкретным образом. (Есть ли контрпримеры?)


0

Хранилища - это области кода, в которых хранится состояние приложения и сложная логика. Причина этого заключается в том, что несколько представлений, вероятно, будут использовать одни и те же данные, но отображать их по-разному, или отображать некоторые, но не все данные для конкретного домена. Например, пользователь входит в систему, и вы получаете его имя, фамилию, адрес электронной почты, фотографию, город, адрес, номер телефона и т. Д. Эта информация отображается в отдельных представлениях. Вместо дублирования данных между представлениями мы можем использовать один магазин под названием UserStore, в котором хранятся данные для пользователя. Это упрощает систему, предоставляя «одно место для внесения изменений» всякий раз, когда необходимо изменить логику или сохраненные данные. Есть много других причин для использования Магазина, но я думаю, что это наиболее очевидная причина.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.