我想知道如何一次获取多个GET URL,然后将获取的JSON数据放入我的React DOM元素中.

这是我的代码:

fetch("http://localhost:3000/items/get")
.then(function(response){
        response.json().then(
            function(data){
                ReactDOM.render(
                    <Test items={data}/>,
                    document.getElementById('overview')
                );}
        );
    })
.catch(function(err){console.log(err);});

然而,我想从我的服务器获取额外的JSON数据,然后用所有这些JSON数据呈现我的ReactDOM.例如:

ReactDOM.render(
   <Test items={data} contactlist={data2} itemgroup={data3}/>,
   document.getElementById('overview')
);

这可能吗?如果没有,那么还有什么其他解决方案可以将多个JSON数据提取到我的DOM元素中?

推荐答案

在你下定决心之前,你可以依靠promise go 执行它们.如果您已经习惯了jQuery,那么也可以使用jQuerypromise .

带着promise .在继续执行代码之前,您将强制执行每个请求

Promise.all([
  fetch("http://localhost:3000/items/get"),
  fetch("http://localhost:3000/contactlist/get"),
  fetch("http://localhost:3000/itemgroup/get")
]).then(([items, contactlist, itemgroup]) => {
    ReactDOM.render(
        <Test items={items} contactlist={contactlist} itemgroup={itemgroup} />,
        document.getElementById('overview');
    );
}).catch((err) => {
    console.log(err);
});

但即使很困难,fetch目前还没有在所有浏览器中实现,所以我强烈建议您创建一个额外的层来处理请求,在那里您可以调用fetch或使用回退,否则,比如XmlHttpRequestjQuery ajax.

除此之外,我强烈建议您查看Redux以处理React容器上的数据流.安装起来会更复杂,但在future 会有回报.

Update August 2018 with async/await

到目前为止,fetch已经在所有最新版本的主流浏览器中实现,除了IE11之外,包装器仍然很有用,除非你使用polyfill.

然后,利用新的、现在更稳定的javascript特性,如解构和异步/等待,您可能可以使用类似的解决方案来解决相同的问题(请参阅下面的代码).

我相信,尽管乍一看代码似乎多一点,但实际上是一种更干净的方法.希望有帮助.

try {
  let [items, contactlist, itemgroup] = await Promise.all([
    fetch("http://localhost:3000/items/get"),
    fetch("http://localhost:3000/contactlist/get"),
    fetch("http://localhost:3000/itemgroup/get")
  ]);

  ReactDOM.render(
    <Test items={items} contactlist={contactlist} itemgroup={itemgroup} />,
      document.getElementById('overview');
  );
}
catch(err) {
  console.log(err);
};

Reactjs相关问答推荐

LocalStore未存储正确的数据

react 路由导航不工作,但手动路由工作

为什么我得不到我想要的数据?

如何使用 React 获取表单中的所有值?

在 React 中是否有任何理由要记住 Redux 操作创建者?

更新对象状态的父数组时记住子组件

验证 Yup 中的对象项

React-router动态路径

useRef 不关注模态

在 monorepo 内的工作区或库之间共享 redux 状态

React 组件列表中的第一个计时器正在获取值 NaN

Formik onChange() 字段挂钩覆盖显示值和 Select 机制

为什么刷新页面时我的localStorage PET值变成空字符串?

我应该使用 useEffect 来为 React Native Reanimated 的 prop 值变化设置动画吗?

如何在props 更改时运行自定义挂钩?

如何使用 cypress 获取 MUI TextField 的输入值?

如何从一组对象映射 MUI 5 图标并更改其 colored颜色 ?

如何在 Cypress E2E 的站点上测试react 组件?

无法重用我的组件,它只显示 1 次

React如何在用户登录后等待当前用户数据被获取