[英]How to statically render dynamic pages using next.js, such that the dynamic pages data is not available during build time?
[英]Next.js: Render dynamic pages customized based on requesting host
我想根据请求页面的域使用自定义内容/样式呈现动态 next.js 页面。 基本上在多个域下运行一个 next.js 应用程序。
我知道我必须进行某种自定义路由,但不知道如何以及如何将主机信息传递到请求的页面,因此它从数据库中获取匹配的数据。
您应该能够在pages/_app.jsx
文件static getInitialProps(context)
方法中验证这一点,并使用context
来验证请求来自何处,然后向组件返回一个标志。
例子:
// pages/_app.js
import app from 'next/app';
export default class MyApp extends app {
static getInitialProps({ Component, router, ctx }) {
let pageProps = app.getInitialProps({ Component, router, ctx });
if (ctx.req.headers.host.match(/localhost/)) {
pageProps = {
...pageProps,
renderFrom: 'mydomain',
}
}
return { pageProps };
}
render() {
const { Component, pageProps } = this.props;
return (
<section id="app">
<Component {...pageProps} />
</section>
);
}
}
请注意,我调用app.getInitialProps
来模仿此处的源代码中的next/app
组件行为
在您的pages/index.js
您可以访问props.renderFrom
并在那里显示数据。
// pages/index.js
import React from 'react'
const Home = props => (
<div>
Rendering content for domain: {props.renderFrom}
</div>
)
export default Home
由于您在_app.js
验证请求来自何处, _app.js
该属性将在您的所有容器(页面)中可用,因此您可以为您的应用程序使用相同的路由,只是以不同的方式呈现数据。
提示:您还可以使用next-routes
来管理应用程序的路由,它比 out next 更好,并且在这里您有一个自定义服务器,您也可以在其中管理您的流量。
希望这对您有所帮助,并为您指明正确的方向。
这是在同一个 Next.js 站点上托管多个域的示例(同时维护多种语言和静态站点生成/SSG),使用 Next.js 的 i18n 系统:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.