REDUX Flashcards

1
Q

Три основных принципа Redux

A
  1. У проекта должен быть единый источник истинныю У нас есть глобальный стейт информация о котором употребляется нашими компонентами и при этом не дублируется.
  2. Наш sate (объект стора) дается нам только для чтени. Перезаписывать на прямую не льзя (store.todos = [1, 2]). Изминения стейта происходит через action где мы возврощаем новый масив на основе старого.
  3. Обрабатываться на action-и в редьюсере. Reducer - это чистая синхронная функция которая ведет себя предсказуемо, одинаково выдает результат при одинаковых входных данных.
    Чистые функции не имеюют SideEffect-ов, получиные объекты не мутируют только читают. Возвращают новое значение ни изменяя старое на прямую.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

FLOW REDUX

A

1 есть STORE –> 2. отрисовка в UI –> 3. через UI юзер делает action –> 4. action передается в нужный через функцию dispatch() по очереди вызываются Reducers меняет сторе –> 1 –> 2 –> 3 –> 4–> …..

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

API Reference Redux

A

Redux есть 5 функций Top - Level:
1. createStore(reducer, [preloadedState], [enhancer])
1.1 reducer обязательный параметр который принимает reducer.
1.2 preloadedState - значене по дефолту
1.3 enhancer - принимает мидлвеер.
2. combineReducers(reducers) - комбинирует несколько редюсеров;
3. applyMiddleware(…midlewares);
4. bindActionCreators(actionCreatetors, dispatch) - Преобразует объект, значениями
которого являются генераторы экшенов, в объект с теми же ключами, но
генераторами экшенов, обернутыми в вызов dispatch, т.ч. они могут быть вызваны
напрямую.
(
import * as actions from ‘./action’;
const {incDispatch, decDispatch, resetDispatch} = bindActionCreators(actions,
dispatch);
Мы используем incDispatch вместо dispatch(INCREMENT)
)
5. compose(…functions) - как аргумент принимает функции и они друг за другом будут
вызыватся с переданным аргументом который будет подан на вход.
Объединяет функции справа налево. функции для
композиции. Ожидается, что каждая функция принимает один параметр. Ее
возвращаемое значение будет представлено в качестве аргумента для функции
стоящей слева, и так далее. Исключением является самый правый аргумент,
который может принимать несколько параметров, поскольку он будет
обеспечивать подпись для полученной в результате функции.;

Есть 4 функции по работе со стором:
1. getState() - получает стейт;
2. dispatch() - получает action вызывает все редюсеры по очереди;
3. subscribe(listener); - Данный метод принимает функцию, которая будет
вызывается каждый раз после обновления store. Он как бы «подписывает»
функцию, переданную ему на обновление. К примеру следующий код при каждом
обновлении (при каждом вызове dispatch()) будет выводить новое значение store
в консоль
4. replaceReduxer(nextReducer);

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

useSelector/ useDispatch

A

useSelector() ​ Позволяет извлекать данные из состояния(state) хранилища(store) Redux с помощью функции селектора. (замена getState())
useDispatch - Это хук который возвращает ссылку на функцию dispatch из Redux хранилища(store). Функция находит нужный Reducer и обрабатывает значение.

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

Middleware

A

Это функции которые находятся в промежутке между Action и Reducer. Их может быть любое количество. Используюют ее для:
1. Логирования;
2. Отчет об ошибках;
3. Асинхронная логика;
4. Модификация Action (либо его отмены);
Подключаются во время во время создания стора.
Созданный миделвеер толжен подходить такой сигнатуре.
const myLogger = (store) => (next) => (action) => {
next(action); // обязательно использовать next
};

const store = createStore(counter, applyMiddleware(loger)

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

Что такое thunk разница между Action Creator and thunk Action

A

thunk - это функция которая делает асинхронную задачу и которая умеет диспатчить обычные action-ы. Thnunk можно тоже задиспатчить и стор поймет что с ней делать.
https://www.youtube.com/watch?v=eWdnjfRu9Io&t=337s

Асинхранная логика происходит на уровне мидлвееров. Отправляется запрос на сервер, тем временем вызывается Reducer после прихода результата от сервера мидлвеер вызывает еще раз дополнительный Action.

Action Creator

Функция которая возвращает объект
Не вызывает внутри себя другие события
Не имеет доступа к внешним redux методам
Только синхронная работа

const actionExample = (data) => ({
type: ‘SOME_TYPE’,
payload: data,
});

Thunk Action

Функция которая НЕвозвращает объект
Вызывает внутри себя другие события
Имеет доступа к внешним redux методам(dispatch, getState)
Асинхронная работа

const thunkExample = (data) => (dispatch, getState) => {
dispatch(onLoader(true));
fetch(url)
.then((res) => res.json())
.then((data) => {
dispatch(getDashboard(data));
});

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

Thunk extraArgument

A

Чтобы не импортировать наш client API (запросы на сервер) много раз мы можем использовать thunk.withExtraArgument(client).
потом уже используем в thunk-e как третий параметр второй функции.
const loadUsers = () => (dispatch, _, client) => {
fetch(‘http://……..’)
.then(res => res.json();
.then(data => dispatch(addUsers(data)))

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

Flow работы с thunk middleware

A

В store.dispatch приходит action –> отправляется thunk MD –> thunk MD смотрит это action тогда передает в reducers.
В store.dispatch приходит thunc (function) –> отправляется thunk MD –> thunk MD смотрит это функция –> вызовит данную функцию, сам закинет метод dispatch –> в вызванной функции диспатчатся actions –> при каждом диспатче action –> снова поподает thunk md смотрит что это объект –> передает в редюсер.

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