4. Flux Utils
● Удобное создание Store с использованием
ReduceStore<T>
● Контейнеры Container.create()
○ Взаимодействует со всеми Store
○ Освобождает компонент от связности со Store,
оставляя только использование action’ов внутри
компонента
6. Redux Store
● Все состояния хранятся в едином сторе. Всего один стор на все
приложение.
● store.getState() - так получаем содержимое состояния Store
● Состояние нельзя изменять на прямую, минуя экшены.
● У Store как правило, нет публичных методов для изменения
состояния.
● Это чистая функция, которая обрабатывает экшены
7. Redux action
● Это обычно просто хеш объект, который отправляется через
dispatch({
type: ‘ACTION_TYPE_NAME’,
payload: {
…. // Данные экшена
},
meta: {
…. // Служебные данные экшна
}
})
8. Чистая функция
● Они зависят только от своих параметров. И возвращают только
свой результат.
● Не используют никакие глобальные переменные и не изменяют
состояние вне тела функции.
○ Math.sin(x)
○ parseInt(x, y)
○ $.ajax() - уже не чистая функция
9. Redux Reducer
function reducer(state, action) {
switch(action.type){
case ‘SOME_ACTION_TYPE’:
return {
alias: {
...state.alias,
...action.payload
}
}
default:
return state
}
}
10. Redux сайд-эффекты
● Сайд-эффект - это когда приходится изменять состояние
глобально, к примеру после обращения к API
● В классической схеме Flux паттерна, нет места таким
манипуляциям.
● Для обработки сайд-эффектов в Redux присутствует понятие
прослойки или Middleware
● Middleware - может быть много, по аналогии с веб
фреймворками (схема не нова)
12. Redux middleware
const logMiddleware =
store => next => action => {
console.log(action);
next(action);
}
const store = createStore(store)(reducer,
applyMiddleware(logMiddleware))
13. Redux-thunk
● Предоставляет возможность диспатчить функции вместо
традиционных объектов, как это принято в Redux.
● В переданной функции мы можем сделать вызов api, проделать
какие нибудь вычисления и вызвать dispatch в нужный для нас
момент.
store.dispatch((dispatch) => {
fetch(‘/api/some/data’).then(
data => dispatch(successAction(data)),
err => dispatch(failAction(err))
)
})
17. Redux-saga
Сага - собирает всю логику обработки внутрь себя в отличии от thunk,
где приходится разбивать на мелкие функции и постоянно их
диспатчить.
В Saga - все асинхронное выполняется линейно благодаря function* в
купе с yeild