【问题标题】:How to get data from multiple url's in Reactjs?如何从 Reactjs 中的多个 url 获取数据?
【发布时间】:2018-03-11 14:37:20
【问题描述】:

我想从多个 url 获取 json 数据并将其显示在前端。 以下是网址:

1) 本地主机:3000/api/getdata1

2) 本地主机:3000/api/getdata2

3) 本地主机:3000/api/getdata3

而不是在每个网址上使用.fetch(),如下所示:

.fetch('localhost:3000/api/getdata1')

.fetch('localhost:3000/api/getdata2')

.fetch('localhost:3000/api/getdata3')

这可以在 ReactJs 中以更有效的方式完成吗?

我在尝试:

const dataurls = [
    'localhost:3000/api/getdata1',
    'localhost:3000/api/getdata2',
    'localhost:3000/api/getdata3'
];
const promisedurl = dataurls.map(httpGet);

Promise.all(promisedurls)
.then(data=> {
    for (const d of data) {
        console.log(d);
    }
})
.catch(reason => {
    // Receives first rejection among the Promises
});

请建议应该使用哪一个,或者是否有任何有效的方法可以从多个 url 获取数据。

【问题讨论】:

  • 我建议您制作一个新的 api,将所有 3 个请求的数据结合起来,然后将数据发送给您。
  • @YashThakur 其实我想从不同的 API 端点查询数据,例如:localhost:3000/api/getdata3/search/query="searchterm" 并显示出来。

标签: javascript reactjs promise


【解决方案1】:

ReactJS 是一个视图层库。它与您如何从服务器获取任何数据无关。

即使是像 Redux 和 Reflux 这样的状态库也没有实现任何获取数据的方法。在大多数情况下,您可以在自定义应用程序代码中执行此操作。有时使用额外的库(例如 Redux 中间件)。

所以,是的:您的Promise.all(<several https requests here>) 是实现这一目标的最自然方式。

【讨论】:

  • 我同意这个答案,你也可以缓存这些请求返回的数据,效率更高。
  • @NícolasIensen 如何缓存数据,因为我想使用搜索关键字显示来自不同 API 端点的数据,例如:localhost:3000/api/getdata3/search/query="searchterm"
  • @stonerock 关于“如何缓存”没有单一的答案。但在您的情况下,最简单的事情是使用一个对象。其中 key 是 url 而 value 是响应数据(然后要注意内存泄漏)。
  • @PavelKoryagin 如何克服内存泄漏。我对此完全陌生,我不明白怎么会有内存泄漏。
  • @stonerock 好的,那么我建议您忘记缓存,直到您遇到真正的性能问题。 “过早的优化是万恶之源” (c) Donald Knuth。关注两件事:特性(做什么你做了)和代码层(如何你做什么,特别是什么是视图,什么是模型)。
猜你喜欢
  • 2018-09-22
  • 1970-01-01
  • 2016-12-25
  • 1970-01-01
  • 2021-04-04
  • 1970-01-01
  • 2018-05-23
  • 1970-01-01
  • 2020-03-18
相关资源
最近更新 更多