Dva: effects中的action依赖其他action请求的数据

Created on 26 Jun 2018  ·  5Comments  ·  Source: dvajs/dva

Description: (问题描述)

假如我有个请求获取一个状态数据的,一个获取表格数据,数据中的状态用的是id,而我要展现的是状态数据所对应的label,所以我需要遍历表格数据,让id对应label.
1,如果在同一个action中请求状态数据和表格数据,我每次都会请求状态数据,这样就造成很多重复的请求.
2,如果状态数据写一个action,表格数据写一个action,在reducers中用state中的数据,但是reducers好像是异步的,状态数据所对应的reducer可能会比表格数据的reducer执行的晚.

Expected behavior: (预期的正常效果)

能否控制effects的执行先后顺序?
难道要在componentDidMount中用async和await么?

Actual behavior: (实际效果)

Most helpful comment

首先有一点建议是,尽量让后端解开接口依赖,
其次你可以考虑通过 componentWillRecieveProps 来判断依赖的数据是否请求成功,
最后还是建议,尽量不要想一口气做两个有依赖关系的请求。

控制 effects 执行顺序是一种很奇怪的思路,你可以研究一下 dispatch().then

All 5 comments

完全在effects中可以完成,action 的第二个参数中{call, put} , 还可以解构出来select,这个可以返回state的任意值,这个state是全局的,所以需要state.namespace.xxxxx

首先有一点建议是,尽量让后端解开接口依赖,
其次你可以考虑通过 componentWillRecieveProps 来判断依赖的数据是否请求成功,
最后还是建议,尽量不要想一口气做两个有依赖关系的请求。

控制 effects 执行顺序是一种很奇怪的思路,你可以研究一下 dispatch().then

yield yield put({type: "namaspace/effectMethod1"})
yield yield put({type: "namaspace/effectMethod2"})
yield yield put({type: "namaspace/effectMethod3"})
这样可以让effect按顺序执行....因为它dispatch(effect) ==> promise.....

@ghostriderxx 这样会造成很多无用的请求,有很多依赖,我只需要请求一次即可

Upgrade dva to the lastest version, then use yield put.sync(ANOTHER_ACTION) to invoke another effect.

Was this page helpful?
0 / 5 - 0 ratings