Эта статья представляет собой краткий обзор нескольких распространенных режимов управления состоянием Flux, Redux, Vuex и MobX, она ориентирована на концептуальный уровень и не включает слишком много кода.
государственное управление
Что такое государственное управление?
Государственное управление это,Извлекайте состояния, которые должны быть разделены между компонентами, следуйте определенным соглашениям, управляйте ими единообразно и делайте изменения состояний предсказуемыми..
Зачем нужно государственное управление?
совместное использование состояния
Обычно между компонентами существует какое-то общее состояние.В Vue или React мы обычно продвигаем эту часть состояния в общий родительский компонент.props
В , родительский компонент единообразно управляет общим состоянием, и изменения состояния также выполняются родительским компонентом и передаются вниз. Это приводит к двум проблемам:
- Разделяемое состояние необходимо продвигать к общему родительскому компоненту, если общего родительского компонента нет, часто приходится создавать его самостоятельно.
- Состояние передается сверху вниз родительским компонентом слой за слоем, если компонентов слишком много, то передача данных сильно усложнится.
отслеживание изменений
В процессе отладки приложения может возникнуть необходимость отслеживать процесс изменения состояния, чтобы облегчить воспроизведение и ретроспективу некоторых сценариев приложения. В настоящее время необходимо единообразно управлять состоянием и следовать определенному соглашению для изменения состояния, чтобы можно было предсказать изменение состояния.
Режим магазина
Режим хранилища — это относительно простой режим управления состоянием, который обычно имеет следующие соглашения:
- Состояние хранится во внешней переменной
store
in (также может быть глобальной переменной) -
store
серединаstate
используется для хранения данных с помощьюstore
обслуживание экземпляра -
store
серединаactions
упакованные измененияstate
логика
Блок-схема выглядит следующим образом:
Если изменения состояния выполняются с помощью действий, легко записывать изменения, сохранять моментальные снимки и историю откатов, но режим Store не обеспечивает этого.
Flux
Flux — это архитектурная идея, похожая на MVC, MVVM и т. д.
Состав флюса
Flux делит приложение на четыре части:
- View: просмотр слоя
-
Action: действие, то есть объект сообщения об изменении данных (которое может быть вызвано событиями, тестовыми примерами и т. д.)
- Изменения в Магазине можно вносить только через Действия
- Логика обработки конкретных действий обычно размещается в магазине.
- Объект действия содержит тип (тип) и полезную нагрузку (параметр передачи)
- Dispatcher: Диспетчер, получение действий, отправка во все магазины
- Store: уровень данных, способ хранения статуса приложения и статуса обновления, когда происходит изменение, напоминание представлениям об обновлении страницы.
Notice:
-
Действие, по сути, является чисто декларативной структурой данных, которая предоставляет только описание события, а не конкретную логику события.. Обычно отдается действию
type
Свойству присваивается строка в верхнем регистре, указывающая, что оно является константой, для повышения удобства сопровождения, например:
{
type: 'ADD_USER',
payload: {
name: 'user_name'
}
}
Особенности потока
- Однонаправленный поток данных. Просмотр событий или внешних тестовых случаев выдает Action , который отправляется в Store через Dispatcher , и Store запускает соответствующие методы для обновления данных и обновлений представлений.
- Магазин может иметь несколько
- Store не только хранит данные, но и инкапсулирует методы обработки данных
Redux
Состав Редукса
-
Store: сохранить состояние приложения --
state
и для запускаstate
обновленdispatch
метод и др.Существует только один магазин для всего приложения.. В магазине предусмотрено несколько управленийstate
API:-
store.getState()
: получить текущее состояние -
store.dispatch(action)
:вызыватьstate
изменить (единственный способ) -
store.subscribe(listener)
:настраиватьstate
Изменена функция прослушивателя (если функция обновления представления передается как прослушиватель, она может запускать автоматический рендеринг представления)
-
-
Action: То же, что и Flux, Action — это объект сообщения, используемый для обновления состояния, выдаваемый View.
- Существует Action Creator, который специально генерирует Action, который по сути является функцией, возвращающей объект Action.
-
Reducer: это основа
action.type
возобновитьstate
и вернутьсяnextState
заменить оригиналstate
изСинхронизированная чистая функция(Возвращать тот же результат для тех же параметров, не изменять параметры, не полагаться на внешние переменные). То есть новое состояние получается из состояния приложения и действия:(previousState, action) => newState
.Редуктор возвращает новое состояние
Общий процесс таков: Создатель действий =>action
=> store.dispatch(action)
=> reducer(state, action)
=> state = nextState
. Блок-схема выглядит следующим образом:
Middleware
Redux также поддерживает промежуточное ПО для управления асинхронными потоками данных.
Промежуточное ПО Redux правильноstore.dispatch()
Метод, осуществляемый после упаковки, можетdispatch
Передать функцию или обещание, отличное от действия; передатьapplyMiddleware
метод применения промежуточного программного обеспечения. (Когда последнее ПО промежуточного слоя в цепочке ПО промежуточного слоя начинает отправлять действие, это действие должно быть обычным объектом.)
Часто используемые библиотеки: redux-actions, redux-thunk, redux-promise.
const store = createStore(
reducer,
// 依次执行
applyMiddleware(thunk, promise, logger)
)
Особенности Редукса
-
Однонаправленный поток данных. Представление выдает действие (
store.dispatch(action)
), Store вызывает Reducer для вычисления нового состояния, а если состояние изменяется, вызывает функцию прослушивателя для повторного рендеринга View (store.subscribe(render)
) - единственный источник правды, только с одним магазином
- состояние доступно только для чтения, после каждого обновления состояния может быть возвращено только новое состояние
- Диспетчера нет, но метод отправки интегрирован в Магазин,
store.dispatch()
это единственный способ для представления выполнить действие - Поддерживает использование промежуточного программного обеспечения (Middleware) для управления асинхронным потоком данных.
Vuex
Vuex — это шаблон управления состоянием для Vue.
Основные концепции Vuex
- Store: Vuex принимаетодно дерево состояний, каждое приложение имеет только один экземпляр Store, который содержит состояние, действия, мутации, геттеры, модули под этим экземпляром
-
State: Vuex дляединственный источник правды
- в состоянии пройти
mapState
Вспомогательные функции для доступа к состоянию как к вычисляемому свойству или использования его после внедрения состояния в глобальную через Store.this.$store.state
доступ - Представление обновления состояния реализовано через механизм двусторонней привязки vue.
- в состоянии пройти
- Getter: Эффект геттера и после некоторых фильтров, похожих, можно отфильтровать выходное состояние.
-
Mutation:Мутация — единственный способ изменить состояние в vuex.(в строгом режиме) и только синхронно. через Vuex
store.commit()
вызов мутации -
Action: некоторые из государственныхАсинхронная работаМожно перевести в действие и изменить состояние, отправив Мутаион в действие.
- Пропуск действия
store.dispatch()
триггер метода - в состоянии пройти
mapActions
Вспомогательная функция сопоставляет методы компонента vue сstore.dispatch
Вызов (сначала необходимо ввести хранилище в корневом узле)
- Пропуск действия
- Module: Когда объект Store слишком велик, его можно разделить на несколько модулей в соответствии с конкретными бизнес-требованиями, каждый модуль имеет свое собственное состояние, мутацию, действие, геттер.
Особенности Vuex:
-
Однонаправленный поток данных. Посмотреть через
store.dispatch()
Вызовите Action после того, как Action завершит выполнение асинхронной операции черезstore.commit()
Вызов Mutation для обновления State и просмотра обновления с помощью механизма реагирования vue. - единственный источник правды, как и Redux, в глобальном масштабе существует только один экземпляр Store.
- Может применяться только к Vue
MobX
Философия MobX:
Все, что происходит из состояния приложения, должно быть получено автоматически.
это значит,При изменении состояния все, что применяется к состоянию, автоматически обновляется..
Основные концепции MobX
- State: данные, которые управляют приложением
- Computed values: Рассчитано.Если вы хотите создать значение на основе текущего состояния, используйте вычисляемый
- Reactions: Реагировать, происходит автоматически при изменении состояния
- Actions: Действие, используемое для изменения состояния
- Сбор зависимостей (автозапуск): Данные в MobX основаны наШаблон наблюдателя, добавить наблюдателя через метод autoRun
Возьмите каштан:
const obj = observable({
a: 1,
b: 2
})
autoRun(() => {
console.log(obj.a)
})
obj.b = 3 // 什么都没有发生
obj.a = 2 // observe 函数的回调触发了,控制台输出:2
Особенности Mobx
- Поток потока данных неестественен, и только используемые данные вызовут привязку.Локальные точные обновления (детальный контроль)
- Нет возможности оглянуться назад, потому что данные имеют только одну ссылку
- объектно-ориентированный
- Часто несколько магазинов
- Менее инвазивный код
- Простой и масштабируемый
- Использование MobX для больших проектов может затруднить сопровождение кода.
Суммировать
- Flux, Redux, Vuex — всеОднонаправленный поток данных
- Redux и Vuex основаны на Flux, Redux более общий, Vuex можно использовать только для vue.
- Flux и MobX могут иметь несколько магазинов, Redux и Vuex имеют только один магазин в глобальном масштабе (одно дерево состояний)
- Redux и Vuex подходят для управления состоянием крупных проектов, а применение MobX в крупных проектах ухудшит ремонтопригодность кода
- Промежуточное программное обеспечение представлено в Redux, которое в основном решает побочные эффекты, вызванные асинхронностью, и может выполнять многие сложные задачи с помощью соглашений.
- MobX — один из наименее навязчивых кодов в библиотеке управления состоянием.Он обладает преимуществами мелкозернистого управления, простой масштабируемости и т. д., но не имеет возможности оглянуться назад во времени.В целом подходит для небольших и средние проекты.
Ссылаться на: