Redux 異步操作中間件 Redux-thunk

Redux 異步操作中間件 Redux-thunk

Redux同步修改狀態數據時,Redux要求store.dispatch() 傳遞過來的action是個普通的js對象,這個對象用於描述對數據的操作

但是到了異步的時候,我們需要使用Redux的中間件Redux-thunk,當然中間件有很多。Redux-thunk只是其中的一個。
1.安裝Redux-thunk

npm install --save redux-thunk

2.配置中間件:

import { createStore, applyMiddleware } from 'redux';
import thunk from 'redux-thunk';
import rootReducer from './reducers';
 
const store = createStore(
  rootReducer,
  applyMiddleware(thunk)
);

此時Redux要求store.dispatch() 傳遞過來的action是個函數。redux-thunk會判斷傳遞過來的action類型,是否爲函數,若爲函數類型,則自動調用這個function,並返回dispatch,這樣在異步操作的任何時刻都可以dispatch了。

redux-thunk 源碼展示

function createThunkMiddleware(extraArgument) {
	  return function (_ref) {
	    var dispatch = _ref.dispatch,
	        getState = _ref.getState;
	    return function (next) {
	      return function (action) {
	        if (typeof action === 'function') {
	          return action(dispatch, getState, extraArgument);
	        }

	        return next(action);
	      };
	    };
	  };
	}

	var thunk = createThunkMiddleware();
	thunk.withExtraArgument = createThunkMiddleware;

3.如何使用

store.dispatch(
  changeFn()
);

function changFn () {
	return (dispatch,state)=>{
      axios.get('xx').then((res)=>{
            console.log('ajax請求成功了')
            dispatch()   
        }).catch(()=>{
            console.log('error');
        });
    }
}

總結:

redux的狀態更改:

view——>actions——>reducer——>state變化——>view變化(同步)

view——>actions——>redux middleware——>actions——>reducer——>state變化——>view變化 (異步)

redux middleware就是在actions和reducer之間做了一些處理,不讓store.dispatch 後立即到達reducer去修改狀態。
異步的時候action了兩次

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章