Преобразователи — это функции, оборачивающие выражения, чтобы задержать их вычисление.
Эта задержка достигается в Redux thunk a, когда вызывается действие, оно возвращает функцию. Эта возвращенная функция может быть вызвана позднее.
Вот пример действия thunk.
function incrementAsync() {
// the below function is called by Redux Thunk middleware below.
return dispatch => {
setTimeout(() => {
// Yay! Can invoke sync or async actions with `dispatch`
dispatch(increment());
}, 1000);
};
Функция высшего порядка — это просто функция, которая либо возвращает функцию, либо принимает функцию в качестве одного из своих аргументов. Поскольку эта функция возвращает другую функцию, которая принимает отправку в качестве аргумента, это пример функции более высокого порядка.
Код промежуточного программного обеспечения redux thunk выглядит следующим образом:
function createThunkMiddleware() {
return store => next => action => {
if (typeof action === 'function') {
// since action is a function it is a thunk action creator
// so call it with store methods
return action(store.dispatch, store.getState);
}
// action is not a function so redux thunk ignores it
return next(action);
};
}
Как только вызывается наш создатель thunk действий, он отправляет функцию действия через цепочку промежуточного программного обеспечения. Когда оно достигает нашего промежуточного программного обеспечения thunk, это действие распознается как функция и, следовательно, вызывается снова с помощью методов dispatch и getState хранилища.
Из-за этого второго вызова функции мы теперь находимся в области действия функции, возвращаемой нашим создателем действия thunk. Это означает, что теперь мы можем выполнять асинхронную логику и по-прежнему иметь доступ к методам getState и диспетчеризации хранилища. Вот почему наш создатель действия thunk можно считать выражением thunk. Используя функцию более высокого порядка, мы можем получить доступ, но отложить использование метода отправки или getState хранилища на будущее. Как видно ниже, действие увеличения вызывается с задержкой в одну секунду.
function incrementAsync() {
// the below function is called by Redux Thunk middleware below.
return dispatch => {
setTimeout(() => {
// Yay! Can invoke sync or async actions with `dispatch`
dispatch(increment());
}, 1000);
};
person
therewillbecode
schedule
17.07.2017