reducer中 发送多个fetch请求

来源:9-10 redux状态管理:详情页连接redux(1)

慕粉8061310

2019-06-21

老师,您好: 我买了您的课程 感觉讲的挺好,我再实际的工作中遇到一个问题。我有个业务场景,进入列表页,会先发送一个A请求,根据A请求的返回的结果,在发送B请求。 也就是说B请求的参数,是A请求的结果。这个业务场景在reducer中 怎么实现呢 请老师指点。
我现在的写法是先发送请求A,从A的返回结果中取出请求B用到的参数,虽然这种写法实现了我的业务功能,这种写法不优雅。
如下是我的代码

	//加载左侧列表
    loadDivisionList: (hosid) => {
        return (dispatch, getstate) => {
            const targetURL = url.API_HOSPITAL_DIVSION_LIST(hosid)
            return post(targetURL).then(
                data => {
                    data.data.map((item, index) => {
                        if (index === 0) {
                            item.isSel = true
                        } else {
                            item.isSel = false
                        }
                    })
                    dispatch(fetchDivisionListSuccess(data.data))
                    const targetURL = url.API_DIVSION__DEPARTMENT_LIST(hosid, data.data[0].id)
                    return dispatch(fetchDepartmentList(targetURL))
                },
                error => {

                }
            )
        }
    },

图片描述

写回答

1回答

艾特老干部

2019-06-21

你好。你这种写法是没有问题的,action中本来就应该负责主要的数据逻辑,组件只关注数据的使用。

0
2
艾特老干部
回复
慕粉8061310
如果这种场景在你项目中出现的比较多,也可以考虑进行封装。比如,现在的api中间件只能处理一个异步请求的action,你可以改造成能处理两个action,这时,api中间件除了接收之前的参数,还需要接收关于第二个请求的参数,以及如何从第一个请求的返回结果中获取第二个请求所需的数据(通过传入要获取的属性名或者回调函数)
2019-06-24
共2条回复

React16+Redux实战企业级大众点评Web App

从架构设计到部署上线,带你学习React技术栈与核心思想

1071 学习 · 306 问题

查看课程