74 lines
3.2 KiB
Markdown
74 lines
3.2 KiB
Markdown
---
|
||
title: Redux Thunk
|
||
localeTitle: Redux Thunk
|
||
---
|
||
## Redux Thunk
|
||
|
||
Redux Thunk - это промежуточное программное обеспечение, которое позволяет вам возвращать функции, а не только действия, в Redux 1 . Это позволяет откладывать действия, в том числе работать с обещаниями.
|
||
|
||
Причина, по которой мы используем это промежуточное программное обеспечение, заключается в том, что не все действия, которые мы выполняем, будут синхронными, а некоторые связаны несинхронными, например, с помощью axios для отправки запроса на получение. Это займет немного времени, и простое сокращение не принимает во внимание это поведение. Итак, Redux-thunk приходит на помощь, позволяя нам асинхронно отправлять действия, чтобы мы могли разрешить эти обещания.
|
||
|
||
Пример 1:
|
||
|
||
```javascript
|
||
const INCREMENT_COUNTER = 'INCREMENT_COUNTER';
|
||
|
||
function increment() {
|
||
return {
|
||
type: INCREMENT_COUNTER
|
||
};
|
||
}
|
||
|
||
function incrementAsync() {
|
||
return dispatch => {
|
||
setTimeout(() => {
|
||
// Yay! Can invoke sync or async actions with `dispatch`
|
||
dispatch(increment());
|
||
}, 1000);
|
||
};
|
||
}
|
||
```
|
||
|
||
Пример 2:
|
||
|
||
```javascript
|
||
const GET_CURRENT_USER = 'GET_CURRENT_USER';
|
||
const GET_CURRENT_USER_SUCCESS = 'GET_CURRENT_USER_SUCCESS';
|
||
const GET_CURRENT_USER_FAILURE = 'GET_CURRENT_USER_FAILURE';
|
||
|
||
const getUser = () => {
|
||
return (dispatch) => { //nameless functions
|
||
// Initial action dispatched
|
||
dispatch({ type: GET_CURRENT_USER });
|
||
// Return promise with success and failure actions
|
||
return axios.get('/api/auth/user').then(
|
||
user => dispatch({ type: GET_CURRENT_USER_SUCCESS, user }),
|
||
err => dispatch({ type: GET_CURRENT_USER_FAILURE, err })
|
||
);
|
||
};
|
||
};
|
||
```
|
||
|
||
### Установка и настройка
|
||
|
||
Redux Thunk может быть установлен с использованием `npm install redux-thunk --save` или `yarn add redux-thunk` с командной строкой. Поскольку это инструмент Redux, вам также необходимо настроить Redux. После установки он активируется с помощью `applyMiddleware()` :
|
||
|
||
```javascript
|
||
import { createStore, applyMiddleware } from 'redux';
|
||
import thunk from 'redux-thunk';
|
||
import rootReducer from './reducers/index';
|
||
|
||
const store = createStore(
|
||
rootReducer,
|
||
applyMiddleware(thunk)
|
||
);
|
||
```
|
||
|
||
### Рекомендации
|
||
|
||
* [Redux Thunk Github Repo](https://github.com/reduxjs/redux-thunk)
|
||
* [Redux Middleware](https://redux.js.org/advanced/middleware)
|
||
|
||
### источники
|
||
|
||
1. [Пример счетчика приращений, приведенный в документации Redux Thunk, 10/02/2018](#https://github.com/reduxjs/redux-thunk) |