小编给大家分享一下回来的异步操作的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获、下面让我们一起去了解一下吧!
<强>一、回来的基础强>
<强>回来的强>
- <李>
通过调度(行动)→中间件→减速机处理数据→改变存储→使用订阅()监听店改变更新视图的方式管理状态
李> <李>将所有状态存储在一个商店对象里面
李> <李>减速器为纯函数,而异步操作由于结果的不确定性所以含有副作用,所以需要特殊处理
李> <强> react-redux 强>
容器组件,负责管理数据和业务逻辑,不负责UI呈现
UI组件,提供UI呈现,无状态即不使用this.state,状态全部由。道具提供
由连接生成容器组件,每次店改变会调用连接,连接接收两个参数:mapStateToProps, mapDispatchToProps
mapStateToProps,将状态映射到UI组件的道具
mapDispatchToProps,将派遣方法映射到UI组件的道具
供应商组件,使用content API将存储从顶层开始传到每一层组件供连接使用
<强>二,回来的处理异步的中间件强>
<强> redux-thunk 强>
redux-thunk中间件允许行动是一个方法
中间件收到动作后会执行行动方法并将结果提供给减速机
行动混乱导致不易维护
<强> redux-saga 强>
传奇会监听行动并基于这个行动执行影响操作
影响提供灵活的API,包括阻塞,非阻塞调用,取消,等待,种族等操作
方便隔离并执行异步操作,并易于测试
<强>三,redux-request-async-middleware 强>
先从回来的文档中的异步行动说起,每个接口调用需要派遣三个同步行动,分别是:
一种通知减速器请求开始的行动。对于这种行动,减速器可能会切换一下状态中的isFetching标记。以此来告诉UI来显示加载界面。
一种通知减速器请求成功的行动。对于这种行动,减速器可能会把接收到的新数据合并到状态中,并重置isFetching.UI则会隐藏加载界面,并显示接收到的数据。
一种通知减速器请求失败的行动。对于这种行动,减速器可能会重置isFetching。另外,有些减速器会保存这些失败信息,并在用户界面里显示出来。
也就是一个接口发起是这样的
调度(fetchPostsRequest(主题); 获取(url)。然后(res=比;{ 调度(fetchPostsSuccess(主题,res)); })。抓住(e=比;{ 调度(fetchPostsFailure(主题、e)); })
只是将这个操作封装进中间件里,特殊的地方在于:
- <李>
所有的异步请求共用这三个动作
李> <李>用主题来区分是哪一个请求
李> <李>将所有的结果都放到商店。李请求里
>中间件源码
出口const reduxRequest=商店=比;下一个=比;action=比;{ 让结果=下一个(行动); 让{类型、主题模型}=行动; 让_next=action.next; 如果(type===FETCH_POSTS_REQUEST) { 模型()。(反应=比;{ _next,,_next(响应); 商店。调度(fetchPostsSuccess(主题、响应)); })。抓住(错误=比;{ console.error(错误); 商店。调度(fetchPostsFailure(主题、错误)); }); } 返回结果 },/
- <李>
和redux-thunk一样,将方法放进行动里
李> <李>中间件拦截FETCH_POSTS_REQUEST行动,并进行异步处理
李>减速器源码
=出口const请求(国家={},行动)=比;{ 开关(action.type) { 案例FETCH_POSTS_REQUEST: 返回指定({}, 状态, { (行动。主题:{ isFetching:没错, 状态:& # 39;加载# 39; 主题:action.subject, 回应:空, 错误:空, } } ); 案例FETCH_POSTS_FAILURE: 返回指定({}, 状态, { (行动。主题:{ isFetching:假的, 状态:& # 39;错误# 39; 主题:action.subject, 回复:[action.subject] .response状态, 错误:action.error, } } ); 案例FETCH_POSTS_SUCCESS: 返回指定({}, 状态, { (行动。主题:{ isFetching:假的, 状态:& # 39;成功# 39; 主题:action.subject, 回应:action.response, } } ); 案例FETCH_POSTS_CLEAR: 返回指定({}, 状态, { (行动。主题:{ isFetching:假的, 状态:& # 39;清除# 39; 主题:空, 回应:空, 错误:空, } } ) 返回状态; } }回来的异步操作的示例分析