将 Nextjs URL 解析为选定的组件
Resolve Nextjs URL to a selected component
据我了解,Nextjs 通过将 URL 映射到 pages
文件夹中的相应文件来解析 URL。所以 pages/about-us.js
可以通过 href="/about-us"
.
访问
我想创建多种语言,但不想复制必要的 components/JS 文件。因此,假设我有一个包含以下内容的 about-us.js
:
<Head title={meta}/>
<Nav/>
<MainContent language={lang}/>
<Footer/>
如何在不在 /pages/pl/..
中创建另一个 about-us
.js 的情况下将 /pl/about-us
映射到页面根目录中的 /about-us
.js?
我能想到的解决方案之一是将语言作为查询参数传递
例子
// code for page/about-us.js page
import { withRouter } from 'next/router';
const AboutUs = ({ router }) => {
const { lang } = router.query;
return <div>Welcome to next.js! Language = {lang}</div>;
};
export default withRouter(AboutUs);
所以如果你到达 about-us?lang=pl
它会显示
Welcome to next.js! Language = pl
或者不是在每个页面内解析语言,您可以使用 custom app.js 和类似这样的代码
// custom _app.js
import React from 'react'
import App, { Container } from 'next/app'
export default class MyApp extends App {
static async getInitialProps({ Component, router, ctx }) {
let pageProps = {}
if (Component.getInitialProps) {
pageProps = await Component.getInitialProps(ctx)
}
return { pageProps }
}
state = {
language: undefined
};
componentDidMount() {
const { router } = this.props;
this.setState({ language: router.query.lang });
}
render () {
const { Component, pageProps } = this.props
return (
<Container>
<Component {...pageProps} language={this.state.langugage} />
</Container>
)
}
}
所以每个页面都会有 language
作为参数传递。
希望对您有所帮助。
更新:
要创建自定义路由,您需要检查 disabling file-system routing and write some custom server routing
据我了解,Nextjs 通过将 URL 映射到 pages
文件夹中的相应文件来解析 URL。所以 pages/about-us.js
可以通过 href="/about-us"
.
我想创建多种语言,但不想复制必要的 components/JS 文件。因此,假设我有一个包含以下内容的 about-us.js
:
<Head title={meta}/>
<Nav/>
<MainContent language={lang}/>
<Footer/>
如何在不在 /pages/pl/..
中创建另一个 about-us
.js 的情况下将 /pl/about-us
映射到页面根目录中的 /about-us
.js?
我能想到的解决方案之一是将语言作为查询参数传递
例子
// code for page/about-us.js page
import { withRouter } from 'next/router';
const AboutUs = ({ router }) => {
const { lang } = router.query;
return <div>Welcome to next.js! Language = {lang}</div>;
};
export default withRouter(AboutUs);
所以如果你到达 about-us?lang=pl
它会显示
Welcome to next.js! Language = pl
或者不是在每个页面内解析语言,您可以使用 custom app.js 和类似这样的代码
// custom _app.js
import React from 'react'
import App, { Container } from 'next/app'
export default class MyApp extends App {
static async getInitialProps({ Component, router, ctx }) {
let pageProps = {}
if (Component.getInitialProps) {
pageProps = await Component.getInitialProps(ctx)
}
return { pageProps }
}
state = {
language: undefined
};
componentDidMount() {
const { router } = this.props;
this.setState({ language: router.query.lang });
}
render () {
const { Component, pageProps } = this.props
return (
<Container>
<Component {...pageProps} language={this.state.langugage} />
</Container>
)
}
}
所以每个页面都会有 language
作为参数传递。
希望对您有所帮助。
更新:
要创建自定义路由,您需要检查 disabling file-system routing and write some custom server routing