REDUX/SAGA/MOBX Flashcards

1
Q

Redux

A

Redux — это JS-библиотека для поддерживаемого глобального управления состоянием.

Использует патерн flux.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Патерн redux

A

flux
концепции однонаправленного потока данных.

В стандартной архитектуре Flux следующие компоненты:

Actions — даные содердащие имя действия которое нужно выполнить. Может содержать полезную нашрузку относящуюся к этим действиям.

Dispatcher — предназначен для передачи действий хранилищам.

Stores — действуют как контейнеры для состояния приложения и логики. Реальная работа приложения происходит в Stores

View — компонент, обычно отвечающий за выдачу информации пользователю.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Selector

A

Выбор тех данных из стора, которые нужно получить

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Редюсеры

A

Редюсер — чистая функция, которая принимает предыдущее состояние и экшен (state и action) и возвращает следующее состояние (новую версию предыдущего).

function reducer(state, action) {
switch (action.type) {
case ‘ADD_TODO’: {
// Полагаю, здесь надо бы что-нибудь сделать…
}
}
}

В зависимости от разных action по разному изменяет наш стейт

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

dispatch

A

dispatch — это функция Redux store. Вы вызываете store. dispatch , чтобы отправить действие. Выполняется для изменения состояния stora

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

action

A

Это обект со свойством type и value

Говорит, что нужно сделать с данными, например, добавить что‑то в список, поменять что‑то в форме, загрузить что‑то из интернета и т. д. Action не меняет данные сам, а только передает их в reducer.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

getState (useState)

A

С помощью dispatch() обновили, а как теперь посмотреть новое значение store? Ничего изобретать не нужно, есть метод getState(). Он также, как и метод dispatch вызывается на экземпляре объекта store. Поэтому для моего примера вызов

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

combineReducers

A

combineReducers() позволяет объединить несколько редьюсеров в один.

Если логика обновления компонентов довольно сложна и\или необходимо обрабатывать большое количество различных типов событий, то корневой reducer может стать слишком громоздким. Лучшим решением будет разбить его на несколько отдельных редьюсеров каждый из которых отвечает за обработку только одного типа событий и обновления определённого поля.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

redux-saga

A

redux-saga или санки используют для выполнения асинхронных запросов. в зависимости от результата возвращает разные action и payload.

redux-saga - это библиотека, которая призвана упростить и улучшить выполнение сайд-эффектов (т.е. таких действий, как асинхронные операции, типа загрузки данных и “грязных” действий, типа доступа к браузерному кэшу) в React/Redux приложениях.

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

Библиотека использует концепцию ES6, под названием генераторы, для того, чтобы сделать эти асинхронные потоки легкими для чтения, написания и тестирования.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

MOBX

A

MOBX создает стор который реализует патерн наблюдатель. В конструкторе класса указываются аннотации для каждого свойства объекта.

В mobx используют следующие концепции в сторе:
1. state - это данные, изменение в которых отслеживаются
2. actions - это методы которые изменяют состояние state.
3. computed - это getter, который вычисляет новое значение исходя из изменений текущего state
4. reactions - моделирование побочных эффектов которые вызываются автоматически с изменением state.
(например запуск Autorun. автоматически вызывается при изменении состояния state.isHungry
autorun(() => {
if (giraffe.isHungry) {
console.log(“Now I’m hungry!”)
} else {
console.log(“I’m not hungry!”)
}
})
)

constructor() {
makeObservable(this, {
title: observable,
finished: computed,
toggle: action,
})
}

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

MOBX vs REDUX

A

MobX использует паттерн Observer, redux flux.

Redux обвиняют в boilerplate code (не творческий код). В redux нужно дополнительно подключать сторонние библиотеки (санки сага для асинхронных функций, reselect для мемоизации результата)
(Постоянно приходится писать action, reducer, selecrot, Вроде с redux-toolkit ситуация стала лучше)

В redux можно лучше делать отладку приложения, лучшие devtools. Redux нравится больше

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Патерн mobx

A

Реализует патерн Observer

Наблюдатель — это поведенческий паттерн проектирования, который создаёт механизм подписки, позволяющий одним объектам следить и реагировать на события, происходящие в других объектах.

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

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly