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) |