返回介绍

数据请求

发布于 2019-12-26 23:51:15 字数 1312 浏览 1199 评论 0 收藏 0

在 Rax 的 Web 应用中,尤其是 SSR 应用中,我们推荐在页面入口组件中定义 getInitialProps 属性,来处理数据请求的工作。这是因为:

  • 一旦代码运行在 Server 端,无法像在 Client 那样,异步获取数据后,再通过 setState 来更新页面 UI。渲染引擎需要预先获取数据,然后执行 render 操作。因此,组件的数据请求必须是可被独立调用的。
  • 基于 getInitialProps 定义数据请求,在传统 CSR (客户端渲染)页面中,也可以更方便做的数据预加载等优化,也可以更低成本的切换为 SSR 应用。

为页面入口组件添加 getInitialProps 的示例如下:

import fetch from 'isomorphic-unfetch'

function Page({ stars }) {
  return <div>Rax stars: {stars}</div>
}

Page.getInitialProps = async (ctx) => {
  const res = await fetch('https://api.github.com/repos/alibaba/rax')
  const json = await res.json()
  return { stars: json.stargazers_count };
}

export default Page

通过 getInitialProps 返回的数据,将被作为组件的初始 props。

server 端,getInitalProps 会在页面 render 之前被执行,其返回值将作为页面的初始 props 用于渲染。同时这份数据,会被 JSON.stringify 后,放置于页面中。

client 端,会优先去检测页面中是否输出了这份数据,如果有,则使用这份数据 hydrate 页面,如果没有,则执行 getInitialProps

getInitialProps 在 server 端被执行时,会接收一个 ctx 入参,包含以下字段:

  • req  HTTP request 对象 (仅在server端输出)
  • res  HTTP response 对象 (仅在server端输出)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文