简单说明redux-thunk的作用

是什么

redux-thunk是react的一个applyMiddleware(中间件),你肯定经常在入口js文件中看到如下代码

const store = createStore(todoApp,applyMiddleware(thunk)

有什么用

  • 一个action中进行多次的dispatch
  • 一个action中做其他任何函数能做的事情(reducer因为必须是 pure function所以不能做很多事情)
import {SHOWALL,SHOWNOTHING,ADDTODO} from './types'

//普通action
export const showAll=()=>{return {type:SHOWALL,data:'showAll'}}
export const showNothing=()=>{return {type:SHOWNOTHING,data:'showNothing'}}
export const addTodo=(todo)=>{return {type:ADDTODO,data:todo}}

//可多次dispatch的action
export const test=(todo)=>(dispatch,getState,extraArgument)=>{
    //第一次dispatch
    dispatch({type:SHOWNOTHING,data:'showNothing'})
    console.log(getState());
    //第二次dispatch
    dispatch({type:SHOWALL,data:'showAll'})
    console.log(getState());
    //随便做其他事情
    console.log('随便做其他事情')

}

showAllshowNothingaddTodo是普通的action,返回对象。test是可以多次转发的action。,在test里面我们调用了两次dispatch
在这里插入图片描述
test代码为什么那么写?接着看

背后干了什么

这是源码,就几行,吃惊吧。

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

    return next(action);
  };
}

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

export default thunk;

简单来说就是,就是判断每个action:如果是function类型,就调用这个function(并传入 dispatch 和 getState 及 extraArgument 为参数),而不是任由让它到达 reducer,因为 reducer 是个纯函数,Redux 规定到达 reducer 的 action 必须是一个 plain object 类型。
  参数dispatch就是store.dispatch
  参数getState 就是store.getState

现在应该能理解为什么上面test代码要那么写了吧

为什么需要它

1.即如上所说,我需要在一个action中触发多个dispatch
2.action中做其他任何函数能做的事情,比如带副作用的事情

参考文章
    理解redux-thunk

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值