getServerSideProps 与直接在 React 中获取

Posted

技术标签:

【中文标题】getServerSideProps 与直接在 React 中获取【英文标题】:getServerSideProps vs fetching directly in React 【发布时间】:2021-05-03 20:00:36 【问题描述】:

我对 NextJS 的 getServerSideProps 有点困惑。

您可以在文档中找到此说明。

例如,假设您的页面需要经常预渲染 更新的数据(从外部 API 获取)。你可以写 getServerSideProps 获取此数据并将其传递给 Page

我的困惑是,如果您可以简单地在 React 组件本身中每 x 秒获取一次数据(在通过 getStaticProps 获取初始数据之后),为什么还要使用 getServerSideProps。

使用 getServerSideProps 是否比仅使用 React 方式有优势?

例如这样:

 useEffect(() => 
    const interval=setInterval(()=>
      const fetchdata = async () => 
        const res = await fetch("url")
        const data = await res.json()
        setsongs(data)
      
      fetchdata()
     ,15000)
     return()=>clearInterval(interval)
  , [])

【问题讨论】:

【参考方案1】:

由于文档的原因,getServerSideProps 会获取每个请求的 API 数据。因此,以时间间隔请求(如您在反应版本中提到的)或使用 getServerSideProps 之间存在差异。 另外,请记住getServerSideProps 是在服务器端实现的,在 SEO 很重要的情况下可能很有用。但是,如果在您使用 getServerSideProps 的情况下服务器出现故障,则将不再提供整个页面。 https://nextjs.org/docs/basic-features/data-fetching#getserversideprops-server-side-rendering

同时,当 SEO 不相关时,在客户端(或 React 方式)获取数据很有用,页面不需要预渲染。 https://nextjs.org/docs/basic-features/data-fetching#fetching-data-on-the-client-side

在我看来,当显示的数据经常变化并且用户应该看到最新的数据时,如果您使用getServerSideProps 会更好,SEO 至关重要并且更长的首字节时间 (TTFB) 是可以接受的。

【讨论】:

感谢您的回答,但我不完全明白,如果我可以在预渲染页面时使用 getStaticProps 然后通过 React 在客户端每 x 秒获取一次,为什么我还要使用 getServerSideProps ? SEO 仍然会很好,因为初始加载带有正确的标签(当 react 重新渲染组件时这些标签不会改变)

以上是关于getServerSideProps 与直接在 React 中获取的主要内容,如果未能解决你的问题,请参考以下文章

getServerSideProps 不使用导入更新数据

使用 Next Js getServerSideProps 进行 Apollo 查询?

如何在 getServerSideProps 之外获取 cookie?

getServerSideProps() 未使用组件运行

在 NEXTJS 的 getServerSideProps() 中获取一些 html 表单数据(或对象)

在 NextJs 中如何使用更改事件更改 getServerSideProps