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了两次

你可能感兴趣的:(Redux)