[英]NextJS Head component renders stale props
我的目标是尝试将此标签放在NextJS应用程序的头部:
<link rel="canonical" href="http://stackoverflow.com" />
我已经设置了一个自定义_app.js
,并在getInitialProps中使用url
包返回了我的URL。 这工作正常,我在页面加载时得到了URL。 这是代码:
static async getInitialProps({ Component, ctx }) {
const initialProps = {};
if (isServer) {
const { req: { url: pageUrl, headers: { host } } } = ctx;
initialProps.canonicalHref =
createUrl({subdomain: host.split('.')[0], pathname: url.parse(pageUrl).pathname});
}
return { ...initialProps }
}
在我的渲染函数中,我使用它来渲染链接标签:
<Head>
<link rel="canonical" href={canonicalHref || location.host + router.asPath} key="canonical" />
</Head>
这个想法是getInitialProps返回第一个值,然后在客户端它返回null,从而使其返回到location.host + router.asPath
。
唯一的问题是,无论何时router.asPath更新,它似乎都比实际值落后一步。 例如,假设我在“ http://bla.com/two ”上,而我的前一页是“ http://bla.com/one ”,则该链接将呈现为<link rel="canonical" href="http://bla.com/one" />
。
我希望我在这里已经对自己做了足够的解释,希望有人对您有所帮助:)
如果它在渲染中,则只需使用location.href
而不是location.host + router.asPath
如果您想进一步了解router.asPath为什么显示以前的URL,
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.