返回介绍

Document

发布于 2019-12-26 23:51:14 字数 2452 浏览 1025 评论 0 收藏 0

在 Rax 的 Web 应用中,Document 对应页面的 HTML 模板,使用 JSX 语法来描述,可以将其看做普通的 Rax 组件。

默认的 Document 位于 src/doucment/index.jsx 目录, 内容如下:

import { createElement } from 'rax';
import { Root, Style, Script } from 'rax-document';

function Document() {
  return (
    <html>
      <head>
        <meta charset="utf-8" />
        <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,minimum-scale=1,user-scalable=no,viewport-fit=cover"/>
        <title>document-web</title>
        <Style />
      </head>
      <body>
        {/* root container */}
        <Root />
        <Script />
      </body>
    </html>
  );
}
export default Document;

这些组件的对应关系为

  • Root 页面根节点,id  为 root
  • Style 页面的样式资源,由工程插件自动分析页面依赖产出
  • Script页面的 JS 资源,由工程插件自动分析页面依赖产出

SSR  场景下,Document 和普通 Web 场景略有不同:

  • Root 中将返回页面的初始 HTML 内容
  • 相比普通 Web 应用多了 Data 组件,用于输出页面的初始数据
  • 可以借助于静态方法 getInitialProps ,为 Document 定义的数据请求,示例如下:
import { createElement } from 'rax';
import { Root, Data, Style, Script } from 'rax-document';

function Document(props) {
  const {
    userAgent
  } = props;
  
  return (
    <html>
      <head>
        <meta charset="utf-8" />
        <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,minimum-scale=1,user-scalable=no,viewport-fit=cover"/>
        <title>document-ssr</title>
        <Style />
      </head>
      <body>
		<div>Your user agent: {userAgent}</div>
        {/* root container */}
        <Root />
        {/* initial data from server side */}
        <Data />
        <Script />
      </body>
    </html>
  );
}

// SSR 场景下自定义数据源
Document.getInitialProps = (req, res) => {
  const userAgent = req req.headers['user-agent'] : navigator.userAgent;
  return { userAgent };
};

export default Document;

如果是上一个版本的 Document,则可以参考这份升级指南进行升级。

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

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

发布评论

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