next.js - 您应该如何使用 getServerSideProps 在路由转换时获取客户端数据?
问题描述
Next.js 9.3 引入getServerSideProps
. 现在在getInitialProps
文档中说:
如果您使用的是 Next.js 9.3 或更高版本,我们建议您使用
getStaticProps
orgetServerSideProps
代替getInitialProps
.
问题是:getInitialProps
不只是在服务器端提供道具。它还在客户端上运行并在路由转换时提供道具。在初始服务器渲染后,如果路由更改,getInitialProps
则在客户端上运行。那么,9.3 中引入的新方法如何解释这个非常基本的用例呢?
解决方案
getServerSideProps
getServerSideProps
只在服务器端运行,从不在浏览器上运行。如果页面使用getServerSideProps
,则:当您直接请求此页面时,
getServerSideProps
在请求时运行,并且此页面将使用返回的道具进行预渲染。当您通过 next/link(文档)或 next/router(文档)在客户端页面转换请求此页面时,Next.js 会向服务器发送一个 API 请求,该服务器运行
getServerSideProps
. 它将返回包含运行 getServerSideProps 的结果的 JSON,该 JSON 将用于呈现页面。所有这些工作都会由 Next.js 自动处理,所以你不需要做任何额外的事情,只要你
getServerSideProps
定义好了。
欲了解更多信息。
getStaticProps
仅在构建时运行
在构建时预渲染带有 getStaticProps 的页面时,除了页面 HTML 文件之外,Next.js 还会生成一个 JSON 文件,其中包含运行 getStaticProps 的结果。
此 JSON 文件将用于通过 next/link(文档)或 next/router(文档)进行客户端路由。当您导航到使用 getStaticProps 预呈现的页面时,Next.js 会获取此 JSON 文件(在构建时预先计算)并将其用作页面组件的道具。这意味着客户端页面转换不会调用 getStaticProps,因为只使用导出的 JSON。
欲了解更多信息
推荐阅读
- reactjs - 使用自定义反应组件库时“类型无效”
- c# - 刷新失败,出现 403 Forbidden 错误。刷新令牌已撤销或过期
- python - python 正则表达式解析键值对,值中有多行
- angular - 带有 Angular2 的 vmwClarity 中的 CrlTab
- java - 如何防止后退按钮,直到确认消息?
- javascript - 导出带有图像的 excel 文件 - Reactjs
- nginx - 在 content-security-policy 中隐藏一个端口,以便 script-src 将 url 视为自己
- oracle - Oracle.DataAccess.Client.OracleException:无法加入分布式事务
- php - Twilio SDK PHP - 在房间里设置 mediaRegion?
- microservices - 在实践中设计微服务