【问题标题】:Fetch seems to execute on client in ReactFetch 似乎在 React 的客户端上执行
【发布时间】:2020-03-06 12:31:31
【问题描述】:

我正在使用 React 构建一个 Web 应用程序,并且我正在 componentDidMount 中执行获取请求,例如:

fetch('http://localhost:8080')
            .then(currencies => currencies.json())
            .then(currencies => this.setState({
                currencies, loading: false
            }))
            .catch(err => console.log(err));

这适用于我的机器。我想将应用程序部署到 Kubernetes,因此我将 localhost 更改为服务名称,例如http://history:8080

当我部署它时,似乎在前端 GET 时,前端加载到我的浏览器中,然后尝试从我的个人笔记本电脑获取 history:8080

这是真的,还是我误解了我的错误?

如果这是真的,我如何在后端强制提取?我需要由容器执行请求,然后只需要为页面提供服务。

【问题讨论】:

  • 您是否在笔记本电脑上运行 Kubernetes?
  • @MaazSyedAdeeb 不,它是云端的开发集群
  • componentDidMount 仅在客户端而非服务器端触发
  • @JoeLloyd 啊。我的 fetch api 应该在服务器端在哪里触发?有标准的地方吗?
  • 是的,我没有你的设置。它要复杂得多。我不知道 kubernetes 是什么,但如果那是你的后端,将会有一些服务器端获取的最佳实践。否则你必须在节点中制作一个路由器,这很痛苦。或者使用 Next js,它非常适合 next

标签: reactjs frontend web-frontend


【解决方案1】:

你在使用 react-router 吗?有时客户端路由和服务端路由相同的url/endpoint会发生冲突,解决办法是在后端路由前加上“/api”等,这样就不会冲突了。

【讨论】:

    【解决方案2】:

    在 reactjs 网站阅读此部分 https://reactjs.org/blog/2018/03/27/update-on-async-rendering.html#fetching-external-data

    在支持服务端渲染时,目前需要提供 数据同步 - componentWillMount 经常用于此 目的,但构造函数可以用作替代。即将到来的 suspense API 将使两者都能干净利落地获取异步数据 客户端和服务器渲染。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-03
      • 2016-12-20
      • 1970-01-01
      相关资源
      最近更新 更多