redux教程,如何使用extraReducers监控createAction函数?
发布于 作者:苏南大叔 来源:程序如此灵动~

redux的createAction()
函数,和createAsyncThunk
创建的action
,有什么区别?如何使用extraReducers
监控这些action
呢?这就是本文中在讨论的问题。

大家好,这里是京城互联网非著名从业人员苏南大叔的技术博客,随便写点代码相关的事情。本文来看看redux
中的createAction()
的使用方法。测试环境:win10
,node@16.14.2
,create-react-app@5.0.1
,reduxjs/toolkit@1.8.3
,react-redux@8.0.2
,chrome@103.0.5060.53
,redux-devtools-extension@3.0.11
。
基础代码
createSlice.js
可以创建多个slice
,每个slice
可以放置独立逻辑,也可以通过extraReducers
对其它slice
或者action
进行监控,这些action
包括createAsyncThunk()
也包括createAction()
。
需求用例上,还是沿用上一个例子。参考文章:
- https://newsn.net/say/redux-slice-2.html
- https://newsn.net/say/redux-createasyncthunk.html
- https://newsn.net/say/redux-createasyncthunk-addcase.html
一对儿夫妻wife
和husband
,使用createSlice()
来具象化。现在他们有了一个儿子,儿子目前没有自己的createSlice()
,定义有两个动作,一个是play toy
,另外一个是buy toy
。
这里的buy_toy()
行为是儿子的自主行为,无法取得state
和dispatch
或者payload
的任何联系。也就是说在的async
里面,无法修改state
也无法return
数据。(createAsyncThunk
是可以return
数据的。)

createAction()
里面的函数,必须是个promise()
。可以只定义一个type
,供extraReducers
监控使用。具体的函数逻辑可以不定义留空。
extraReducers
监控
父亲和母亲都可以监控到儿子的买玩具的行为,但是它们无法对其行为进行干涉。只能根据情况,默默的付款。(对自己的属性进行调整,修改自己的state
)。
母亲slice.js
:

父亲slice2.js
:
监听结果

注意:
createAction
的type
字符串的写法,无/fulfilled
、/ejected
或者/pending
的附加写法。- 两个
slice
,都是通过type
字符串进行监控的。所以,并没有对儿子相关定义的任何.js
的引用行为。 - 对比
createAsyncThunk
,createAction
无法产生三种状态变化,也无法和state
或者dispatch
等产生联系。
相关文档
- https://newsn.net/say/redux-slice-2.html
- https://newsn.net/say/redux-createasyncthunk.html
- https://newsn.net/say/redux-createasyncthunk-addcase.html
综述
本文描述了createAction
,可以仅仅定义type
,也可以顺便定义async
函数。在slice
里面可以通过extraReducers
对已经定义好的type
字符串进行监听。如果想要获得返回值,或者监听状态变化等等,就使用createAsyncThunk()
。
更多redux
的经验文章,请点击苏南大叔的博客:


