【问题标题】:Can I avoid a double-API call with NextJS' getServerSideProps?我可以避免使用 NextJS 的 getServerSideProps 进行双 API 调用吗?
【发布时间】:2021-09-01 14:19:12
【问题描述】:

我正在修改 NextJS 的 getServerSideProps。我看到当我从头开始请求页面时,我会收到完全水合的内容。然后,当我导航到新页面时,会进行 API 调用,它会接收一些用于重新填充页面的 JSON 数据。

我不喜欢的是新的 API 调用实际上是在进行两次调用。例如我的getServerSideProps 有一个axios.get() 电话。所以在点击新页面时,我得到:

  1. 打电话给example.com/_next/data/1231234/....
  2. 该调用必须在后台运行我的 getServerSideProps() 及其 axios.get() 以检索新的 JSON 数据。

那么有没有办法避免双重 API 调用?我希望在第一个页面加载后,点击新页面就跳到第二步。

在非 NextJS 应用程序上,我会在页面加载时运行类似 useEffect() 的内容,但显然页面的第一次运行不会返回完整内容,出于搜索引擎的目的,我会喜欢返回完整的内容。我看过一些讲座,其中 Google 说他们确实运行 javascript 并查看完整内容,但对于所有其他引擎来说也可能是安全的。

【问题讨论】:

    标签: reactjs next.js


    【解决方案1】:

    getServerSideProps 将始终在请求时运行——无论何时您点击页面(或者可能使用预取,默认值,next/link)这将导致页面的预渲染使用来自getServerSideProps 的数据旁注:如果您使用next API 中间件,那么您可以避免ajax 调用,只需导入直接在getServerSideProps 中运行的方法。

    听起来您想在构建时获取数据并可以静态呈现页面?如果是这样,宁愿使用getStaticProps

    如果您愿意,您也可以避免两者并在useEffect 中进行 API 调用,但当然,一旦页面加载,代码将在客户端运行。 getServerSideProps 将在呈现给客户端之前预呈现带有数据的页面。

    【讨论】:

    • 谢谢 - 实际上我最终切换到 getInitialProps,它正在做我想做的事 - 在第一次请求时预渲染,然后在后续请求时在浏览器中运行。 NextJS 团队推荐getServerSideProps,但由于它的工作原理,我认为它不会做我想要的。切换到getInitialProps 让我的页面加载速度明显加快。请注意,我在这些函数中的 axios.get() 正在调用不同的服务器,这就是双 API 调用不好的原因。希望他们不要弃用getInitialProps..
    猜你喜欢
    • 2011-04-06
    • 1970-01-01
    • 2020-09-25
    • 1970-01-01
    • 2020-07-28
    • 1970-01-01
    • 1970-01-01
    • 2014-11-21
    • 2020-05-27
    相关资源
    最近更新 更多