Redux Async
异步actions
当调用一个异步API时,会有两个关键时刻:开始调用函数的时刻和获得响应的时刻(或者超时了😢)。
这两个时刻都可能更改应用程序中state
,所以需要在这两个时刻派发action
,并且与此同时让reducer
生成新的state
,面对这种情况,通常需要最起码派发三种不同的action
:
- 一个action负责通知reducers请求已经开始
reducers可能会在state中保存一个
isFetching
标志,以通知UI显示加载页面 - 一个action负责通知reducers请求已经成功完成
reducers会将新的数据合并进
state
,并且重置isFetching
标志,UI界面将会隐藏加载页面并且展示获取的数据 - 一个action负责通知reducers请求失败了
这种情况下reducers也会重置
isFecthing
,可能某些情况下reducers会将错误信息储存以便于UI展示。
可以在action
中使用一个专用的status
字段:
{ type: 'FETCH_POSTS' }
{ type: 'FETCH_POSTS', status: 'error', error: 'Oops' }
{ type: 'FETCH_POSTS', status: 'success', response: { ... } }
或者为它们定义不同的type类型:
{ type: 'FETCH_POSTS_REQUEST' }
{ type: 'FETCH_POSTS_FAILURE', error: 'Oops' }
{ type: 'FETCH_POSTS_SUCCESS', response: { ... } }
可以选择使用单个action type加flag标识,或者是定义不同的action type都可以。type增多了会减少错误几率,但是如果使用redux-actions这样的辅助库来生成action和reducer就不用考虑这样的问题。