我试图得到什么人会考虑人们如何组织他们的反应+终极版应用程序的网络调用的最佳实践的一些想法。我通常让我的组件进行调用,获取数据,然后将其传递给一个将会减少的操作。这是最好的做法,还是将网络从我的组件中分离出来,并将该逻辑放在应用程序中的其他位置,也许在减速器中更好?如果把网络电话在反应+终极版应用
7
A
回答
4
进行网络通话的最佳位置在您的动作创作者中。但是,您将需要一些中间件来实现最佳效果。看看这个promise-middleware(实际上,我建议查看整个教程)。如果使用该中间件,则可以让操作创建者返回一个承诺,并且还有三种操作类型 - 一个用于请求,一个用于处理成功的响应,另一个用于处理失败的请求。然后,你只要听你的减速器中的那3个动作。
因此与中间件,你可以有一个动作的创造者是这样的:
function networkCall() {
return {
types: ['MAKE_REQUEST', 'REQUEST_SUCCESS', 'REQUEST_FAILURE'],
promise:() => {
return new Promise((resolve, reject) => {
$.ajax({
url: 'example.com/api'
type: 'GET'
});
})
}
}
}
很明显,你可以自由地建立自己的诺言中间件,但应该设置你在正确的方向。
1
我几乎遵循redux tutorials for Async Actions行动的模式。对我来说最重要的是保持行动中的一切异步 - 远离组件和商店/减速器。
我也用Redux Crud规范与网络操作相关的动作。
1
你可以使用API中间件,或者redux-api-middleware
或者你自己的东西(这对write one不是很难)。
然后,例如,你的行动创造者可以返回操作,如
{type: 'API_GET', url: '/api/userList', nextType: 'USER_LIST'}
...这将通过将发送实际的请求,然后分派像一个新的动作中间件后处理:
{type: 'USER_LIST_FETCHED', status: 200, payload: [{id: 1, ...}, ...]}
{type: 'USER_LIST_FAILED', status: 404, payload: {message: '...'}}
2
我认为这是一件事是正确的角度来完成。您的所有网络电话整齐地放置在您的services
中。这很容易在Redux中完成。
该文档正确地表明,网络电话是在你actions
。我把它们分成一个单独的地方,你可以称之为“服务”。在那里你可以定义所有的常量,比如你的API服务器URL,认证相关的东西等。这将是唯一知道你的网络调用实现细节的地方 - 你使用哪个库(jQuery,axios,superagent,等等)。
你的行为将文件从这些服务中导入功能,并呼吁他们。如果您稍后决定更换网络库,则不必更改actions
。
相关问题
- 1. 在反应 - 终极版
- 2. 使用反应/终极版使用
- 3. 反应,终极版/反应路由器:如何在链接
- 4. 反应,和/终极版,在路线
- 5. AG-电网与终极版
- 6. 习惯的方法反应,终极版
- 7. 反应,和/终极版+ API的SoundCloud
- 8. 反应,终极版,和不可变
- 9. 更新道具反应,终极版
- 10. 终极版咚的反应本地
- 11. 错误商反应,终极版
- 12. 问题与片上()反应,终极版
- 13. 打字稿反应/终极版
- 14. 请求Axios |反应过来,终极版
- 15. 调度功能,终极版,反应
- 16. 呼叫componentWillReceiveProps反应,和/终极版
- 17. 如何使用终极版的供应商与之反应
- 18. 使用终极版 - 坚持与Baqend反应,和/终极版入门
- 19. 导航到用户登录成功的主页反应+终极版+反应路由器,终极版
- 20. 转换一个反应终极版块反应本土
- 21. 渲染反应,引导和反应,终极版形式
- 22. CORS问题进行API调用的反应/终极版应用
- 23. HMR用于创建反应的应用程式内反应,终极版
- 24. 设定初始状态时,如果我在终极版使用反应程序
- 25. 反应,和/终极版我可以反向使用()
- 26. 如何调用两个函数的onClick()反应/终极版
- 27. 如何使用做出反应,终极版的提供商
- 28. 存储“全局”对象终极版之外的存储反应,和/终极版应用
- 29. 终极版形式始终返回多选反应的微件
- 30. 使用终极版,反应并且反应路由器-DOM 4.x的