返回
打通 Redux 的任督二脉——Redux Thunk 源码解析
前端
2023-09-01 07:21:28
Redux Thunk 是什么?
Redux Thunk 是 Redux 的一个中间件,它允许你在 Redux 的 dispatch
方法中返回一个函数,这个函数可以执行异步操作,并在异步操作完成后分发一个新的 action。
Thunk 中间件的作用就是将这些异步操作转换成 Redux 可以理解的 Action。
源码解析
Redux Thunk 的源码非常简单,只有 11 行代码:
const thunk = store => next => action =>
typeof action === 'function' ?
action(store.dispatch, store.getState) :
next(action)
拆解源码
-
const thunk = store => next => action =>
:这行代码定义了一个函数
thunk
,它接收三个参数:store
、next
和action
。store
是 Redux 的 store 对象。next
是下一个中间件或 reducer。action
是要被分发的 action。
-
typeof action === 'function'
:这行代码检查
action
是否是函数。 -
action(store.dispatch, store.getState)
:如果
action
是函数,那么这行代码就会调用它,并将store.dispatch
和store.getState
作为参数传递给它。 -
next(action)
:如果
action
不是函数,那么这行代码就会调用next
方法,并将action
作为参数传递给它。
源码原理
Redux Thunk 的工作原理很简单:
- 当你调用
dispatch(action)
时,Redux Thunk 就会检查action
是否是函数。 - 如果
action
是函数,那么 Redux Thunk 就会调用它,并将store.dispatch
和store.getState
作为参数传递给它。 - 这个函数可以执行异步操作,并在异步操作完成后分发一个新的 action。
- 如果
action
不是函数,那么 Redux Thunk 就会调用下一个中间件或 reducer。
使用场景
Redux Thunk 可以用于各种需要执行异步操作的场景,例如:
- 从服务器获取数据
- 在用户界面上显示加载指示器
- 在错误发生时显示错误消息
结语
Redux Thunk 是一个非常有用的 Redux 中间件,它允许你轻松地执行异步操作。Redux Thunk 的源码也非常简单,只有 11 行代码,因此很容易理解。如果你需要在 Redux 中执行异步操作,那么我强烈推荐你使用 Redux Thunk。