Redux-Thunk рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ Redux рдХреНрд░рд┐рдпрд╛рдПрдВ рдХреИрд╕реЗ рдХрд░реЗрдВ

рдЕрднрд┐рд╡рд╛рджрди рд╣реЗрдмреНрд░! рдореИрдВ рдЖрдкрдХреЗ рд▓рд┐рдП рд▓реЗрдЦ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реВрдВ - Redux Thunk рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ Redux рдХреНрд░рд┐рдпрд╛рдПрдБ , рд▓реЗрдЦрдХ - Alligator.io


рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, Redux рдХреНрд░рд┐рдпрд╛рдПрдВ рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╣реЛрддреА рд╣реИрдВ, рдЬреЛ рдПрдХ рдРрд╕реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╕рд░реНрд╡рд░ API рдХреЗ рд╕рд╛рде рд╕рд╣рднрд╛рдЧрд┐рддрд╛ рдХрд░рдиреЗ рдпрд╛ рдЕрдиреНрдп рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХреНрд░рд┐рдпрд╛рдПрдВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, Redux рд╣рдореЗрдВ рдорд┐рдбрд▓рд╡реЗрдпрд░ рдЬреИрд╕реА рдЪреАрдЬрд╝ рдореБрд╣реИрдпрд╛ рдХрд░рд╛рддрд╛ рд╣реИ, рдЬреЛ рдПрдХреНрд╢рди рдбрд┐рд╕реНрдкреИрдЪ рдФрд░ рд░рд┐рдбреНрдпреВрд╕рд░ рдХреЗ рдмреАрдЪ рдЦрдбрд╝рд╛ рд╣реЛрддрд╛ рд╣реИред Redux рдореЗрдВ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рджреЛ рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдорд┐рдбрд▓рд╡реЗрдпрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИрдВ, рдпреЗ Redux Thunk рдФрд░ Redux Saga рд╣реИрдВ ред рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ рд╣рдо рдкрд╣рд▓реЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред

Redux Thunk рдПрдХ рдорд┐рдбрд▓рд╡реЗрдпрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдмрдЬрд╛рдп рдлрдВрдХреНрд╢рди рд▓реМрдЯрд╛рдиреЗ рд╡рд╛рд▓реЗ рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдлрд╝рдВрдХреНрд╢рди рдкреНрд░реЗрд╖рдг рд╡рд┐рдзрд┐ рдХреЛ рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдСрдкрд░реЗрд╢рди рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╢рд░реАрд░ рдХреЗ рдЕрдВрджрд░ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЛ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

рдпрджрд┐ рдЖрдк рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдердВрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рджреБрдирд┐рдпрд╛ рдореЗрдВ рдПрдХ рдЕрд╡рдзрд╛рд░рдгрд╛ рд╣реИ рдЬрдм рдПрдХ рдСрдкрд░реЗрд╢рди рдХреЛ рд╡рд┐рд▓рдВрдмрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╕реНрдерд╛рдкрдирд╛ рдФрд░ рд╕реЗрдЯрдЕрдк


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ Redux-thunk рдкреИрдХреЗрдЬ рдЬреЛрдбрд╝реЗрдВ:

$ yarn add redux-thunk # ,   npm: $ npm install redux-thunk 

рдлрд┐рд░, рдЬрдм рдЖрдк Redux рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ applyMiddleware рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рд╕реНрдЯреЛрд░ рдмрдирд╛рддреЗ рд╣реИрдВ рддреЛ рдорд┐рдбрд▓рд╡реЗрдпрд░ рдЬреЛрдбрд╝реЗрдВ:

index.js

 import React from 'react'; import ReactDOM from 'react-dom'; import { createStore, applyMiddleware } from 'redux'; import { Provider } from 'react-redux'; import thunk from 'redux-thunk'; import rootReducer from './reducers'; import App from './App'; //  applyMiddleware,   thunk middleware   const store = createStore(rootReducer, applyMiddleware(thunk)); ReactDOM.render( <Provider store={store}> <App /> </Provider>, document.getElementById('root') ); 

рдореБрдЦреНрдп рдЙрдкрдпреЛрдЧ


рдЖрдорддреМрд░ рдкрд░, Redux-Thunk рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрд╛рд╣реНрдп API рдХреЗ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдпрд╛ рд╕рд╣реЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдПред Redux-Thunk рдмрд╛рд╣рд░реА рдПрдкреАрдЖрдИ рдЕрдиреБрд░реЛрдз рдХреЗ "рдЬреАрд╡рди рдЪрдХреНрд░" рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рднреЗрдЬрдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдирд┐рдпрдорд┐рдд рдЯреВрдбреВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реИред рдЬрдм рд╣рдо "рдЯреВрдбреВ рдЬреЛрдбрд╝реЗрдВ" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдорддреМрд░ рдкрд░, рдкрд╣рд▓реА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЛ рднреЗрдЬ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдПрдХ рдирдпрд╛ рдЯреВрдбреВ рдЬреЛрдбрд╝рдиреЗ рдХреА рд╢реБрд░реБрдЖрдд рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реИред рдлрд┐рд░, рдпрджрд┐ рдЯреВрдбреВ рддрддреНрд╡ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рд╕рд░реНрд╡рд░ рджреНрд╡рд╛рд░рд╛ рд╡рд╛рдкрд╕ рдЖ рдЧрдпрд╛ рд╣реИ, рддреЛ рдПрдХ рдФрд░ рдХрд╛рд░реНрд░рд╡рд╛рдИ рд╣рдорд╛рд░реЗ рдирдП рдЯреВрдбреВ рддрддреНрд╡ рдХреЗ рд╕рд╛рде рднреЗрдЬ рджреА рдЬрд╛рддреА рд╣реИ, рдФрд░ рдСрдкрд░реЗрд╢рди рд╕рдлрд▓ рд╣реЛрддрд╛ рд╣реИред рдпрджрд┐ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рд╕рд░реНрд╡рд░ рдПрдХ рддреНрд░реБрдЯрд┐ рджреЗрддрд╛ рд╣реИ, рддреЛ рдирдпрд╛ рдЯреВрдбреВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рдПрдХ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддреА рд╣реИ рдХрд┐ рдСрдкрд░реЗрд╢рди рдкреВрд░рд╛ рдирд╣реАрдВ рд╣реБрдЖ рд╣реИред

рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ Redux-Thunk рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдШрдЯрдХ рдореЗрдВ, рдХреНрд░рд┐рдпрд╛ рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣ рднреЗрдЬреА рдЬрд╛рддреА рд╣реИ:

AddTodo.js

 import { connect } from 'react-redux'; import { addTodo } from '../actions'; import NewTodo from '../components/NewTodo'; const mapDispatchToProps = dispatch => { return { onAddTodo: todo => { dispatch(addTodo(toto)); } }; }; export default connect( null, mapDispatchToProps )(NewTodo); 

рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ рд╣реА, рд╕реНрдерд┐рддрд┐ рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИред рдпрд╣рд╛рдБ рд╣рдо рдЕрдЬрд╛рдХреНрд╕ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП Axios рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдпрд╣ рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рд╣реИ, рддреЛ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рдЬреЛрдбрд╝реЗрдВ:

 # Yarn $ yarn add axios # npm $ npm install axios --save 

рд╣рдо рдкрддреЗ рдкрд░ рдПрдХ рдкреЛрд╕реНрдЯ рдЕрдиреБрд░реЛрдз рдХрд░реЗрдВрдЧреЗ - jsonplaceholder.typicode.com/todos :
рдХреНрд░рд┐рдпрд╛рдПрдБ / index.js
 import { ADD_TODO_SUCCESS, ADD_TODO_FAILURE, ADD_TODO_STARTED, DELETE_TODO } from './types'; import axios from 'axios'; export const addTodo = ({ title, userId }) => { return dispatch => { dispatch(addTodoStarted()); axios .post(`https://jsonplaceholder.typicode.com/todos`, { title, userId, completed: false }) .then(res => { dispatch(addTodoSuccess(res.data)); }) .catch(err => { dispatch(addTodoFailure(err.message)); }); }; }; const addTodoSuccess = todo => ({ type: ADD_TODO_SUCCESS, payload: { ...todo } }); const addTodoStarted = () => ({ type: ADD_TODO_STARTED }); const addTodoFailure = error => ({ type: ADD_TODO_FAILURE, payload: { error } }); 

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдХреИрд╕реЗ рд╣рдорд╛рд░реЗ addTodo рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░ рд╕рд╛рдорд╛рдиреНрдп рдСрдмреНрдЬреЗрдХреНрдЯ рдПрдХреНрд╢рди рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдлрд╝рдВрдХреНрд╢рди рджреЗрддрд╛ рд╣реИред рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рд╕реНрдЯреЛрд░ рд╕реЗ рдкреНрд░реЗрд╖рдг рддрд░реНрдХ рд▓реЗрддрд╛ рд╣реИред

рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╢рд░реАрд░ рдХреЗ рдЕрдВрджрд░, рд╣рдо рдкрд╣рд▓реЗ рд╕рд╛рдорд╛рдиреНрдп рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЛ рднреЗрдЬрддреЗ рд╣реИрдВ, рдЬреЛ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╣рдордиреЗ рдмрд╛рд╣рд░реА рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдирдпрд╛ рдЯреВрдбреВ рдЬреЛрдбрд╝рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ рд╣реИред рд╕рд░рд▓ рд╢рдмреНрджреЛрдВ рдореЗрдВ - рдЕрдиреБрд░реЛрдз рд╕рд░реНрд╡рд░ рдкрд░ рднреЗрдЬрд╛ рдЧрдпрд╛ рдерд╛ред рдлрд┐рд░, рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХреНрд╕рд┐рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдПрдХ POST рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВред рд╕рд░реНрд╡рд░ рд╕реЗ рдПрдХ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдЬрд╡рд╛рдм рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рд╕рд░реНрд╡рд░ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХреА рдЧрдИ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЛ рднреЗрдЬрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╕рд░реНрд╡рд░ рд╕реЗ рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдПрдХ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдХреЗ рд╕рд╛рде рдПрдХ рдФрд░ рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрд╛рд░реНрд░рд╡рд╛рдИ рднреЗрдЬрддреЗ рд╣реИрдВред

рдЬрдм рд╣рдо рдПрдХ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╛рд╣рд░реА (рд░рд┐рдореЛрдЯ) рд╣реИ, рддреЛ рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ JSONPlaceholder рдХреА рддрд░рд╣, рдпрд╣ рдиреЛрдЯрд┐рд╕ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ рдХрд┐ рд╕рд░реНрд╡рд░ рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЖрдиреЗ рддрдХ рд╡рд┐рд▓рдВрдм рд╣реЛрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдПрдХ рд╕реНрдерд╛рдиреАрдп рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЙрддреНрддрд░ рдмрд╣реБрдд рдЬрд▓реНрджреА рдЖ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рджреЗрд░реА рдХреА рд╕реВрдЪрдирд╛ рдирд╣реАрдВ рд╣реЛрдЧреАред рдЕрдкрдиреА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рдЖрдк рд╡рд┐рдХрд╕рд┐рдд рд╣реЛрдиреЗ рдкрд░ рдХреГрддреНрд░рд┐рдо рд╡рд┐рд▓рдВрдм рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ:

рдХреНрд░рд┐рдпрд╛рдПрдБ / index.js (рдХреЛрдб рдХрд╛ рдЯреБрдХрдбрд╝рд╛)

 export const addTodo = ({ title, userId }) => { return dispatch => { dispatch(addTodoStarted()); axios .post(ENDPOINT, { title, userId, completed: false }) .then(res => { setTimeout(() => { dispatch(addTodoSuccess(res.data)); }, 2500); }) .catch(err => { dispatch(addTodoFailure(err.message)); }); }; }; 

рдФрд░ рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рд╕реАрдзреЗ рдПрдХ рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХ рд╕рдХрддреЗ рд╣реИрдВ:

рдХреНрд░рд┐рдпрд╛рдПрдБ / index.js (рдХреЛрдб рдХрд╛ рдЯреБрдХрдбрд╝рд╛)

 export const addTodo = ({ title, userId }) => { return dispatch => { dispatch(addTodoStarted()); axios .post(ENDPOINT, { title, userId, completed: false }) .then(res => { throw new Error('NOT!'); // dispatch(addTodoSuccess(res.data)); }) .catch(err => { dispatch(addTodoFailure(err.message)); }); }; }; 

рдкреВрд░реНрдгрддрд╛ рдХреА рдЦрд╛рддрд┐рд░, рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдХрд┐ рдХреИрд╕реЗ рд╣рдорд╛рд░реЗ рдЯреВрдбреВ рд░рд┐рдбреНрдпреВрд╕рд░ рдЕрдиреБрд░реЛрдз рдХреЗ рдкреВрд░реНрдг "рдЬреАрд╡рди рдЪрдХреНрд░" рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:

reducers / todoReducer.js

 import { ADD_TODO_SUCCESS, ADD_TODO_FAILURE, ADD_TODO_STARTED, DELETE_TODO } from '../actions/types'; const initialState = { loading: false, todos: [], error: null }; export default function todosReducer(state = initialState, action) { switch (action.type) { case ADD_TODO_STARTED: return { ...state, loading: true }; case ADD_TODO_SUCCESS: return { ...state, loading: false, error: null, todos: [...state.todos, action.payload] }; case ADD_TODO_FAILURE: return { ...state, loading: false, error: action.payload.error }; default: return state; } } 

getState


Redux-Thunk рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░ рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдпрд╛ рдЧрдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдЧреЗрдЯрд╕реНрдЯреЗрдЯ рд╡рд┐рдзрд┐ рдХреЛ рджреВрд╕рд░реЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рднреА рд▓реЗрддрд╛ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рд╕реАрдзреЗ рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрдЯрд░ рдХреЗ рдЕрдВрджрд░ рд╕реНрдерд┐рддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:

рдХреНрд░рд┐рдпрд╛рдПрдБ / index.js (рдХреЛрдб рдХрд╛ рдЯреБрдХрдбрд╝рд╛)

 export const addTodo = ({ title, userId }) => { return (dispatch, getState) => { dispatch(addTodoStarted()); console.log('current state:', getState()); // ... }; }; 

рдЗрд╕ рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╕рдордп, рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЗрд╡рд▓ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рд╣реЛрдЧреАред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

 {loading: true, todos: Array(1), error: null} 

рдЬрдм рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЖрдкрдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдЧреЗрдЯрд╕реНрдЯреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рд╣рдордиреЗ рдЯреВрдбреВ рддрддреНрд╡реЛрдВ рдХреА рдЕрдзрд┐рдХрддрдо рд╕рдВрдЦреНрдпрд╛ 4 рддрдХ рд╕реАрдорд┐рдд рдХрд░ рджреА рд╣реИ, рддреЛ рд╣рдо рдЗрд╕ рд╕реАрдорд╛ рдХреЛ рдкрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдХреНрд░рд┐рдпрд╛рдПрдБ / index.js (рдХреЛрдб рдХрд╛ рдЯреБрдХрдбрд╝рд╛)

 export const addTodo = ({ title, userId }) => { return (dispatch, getState) => { const { todos } = getState(); if (todos.length >= 4) return; dispatch(addTodoStarted()); // ... }; }; 
рдордЬреЗрджрд╛рд░ рддрдереНрдп - рдХреНрдпрд╛ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ Redux-Thunk рдХреЛрдб рдореЗрдВ рдХреЗрд╡рд▓ 14 рд▓рд╛рдЗрдиреЗрдВ рд╣реИрдВ? рдЖрдк рдЕрдкрдиреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣реБрдб рдХреЗ рдиреАрдЪреЗ Redux-Thunk рдорд┐рдбрд▓рд╡реЗрдпрд░ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ
рдореВрд▓ рд▓реЗрдЦ рдХрд╛ рд▓рд┐рдВрдХ - Redux Thunk рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ Redux рдХреНрд░рд┐рдпрд╛рдПрдБ ред

Source: https://habr.com/ru/post/hi483314/


All Articles