我正在使用NextJS 12。2.5,我创建了一个特定ID的部分,以便能够将用户直接重定向到它,但问题是,每次我输入带有锚和部分ID的URL时,例如,http://localhost:3000/mx #contact-form,我都会得到以下错误:
Unhandled Runtime Error
Error: Hydration failed because the initial UI does not match what was rendered on the server.
我尝试了以下实现,但没有成功:
scrollToSection。ts
export const scrollToSection = () => {
const anchor = window.location.hash;
if (!anchor) return;
const element = document.querySelector(anchor);
if (element && typeof document !== 'undefined')
element.scrollIntoView();
};
然后在我的页面上。tsx
.....
const router = useRouter();
useEffect(() => {
router.events.on('routeChangeComplete', scrollToSection);
return () => {
router.events.off('routeChangeComplete', scrollToSection);
};
}, []);
.....
有人知道如何解决这个问题吗?
1条答案
按热度按时间vlju58qv1#
经过几个小时的调试,我意识到问题不是在URL中追加“#contact-form”,而是与URL相关,而是由于头中的一个组件导致了水合不匹配,这个组件使用
这里的问题是,这一行不仅从www. example中提取了国家前缀 www.example.com ,但所有行包括#contact-form。
因此,有一个组件在第一次加载时呈现,但后来消失了,因为这个组件需要一个国家前缀,而es#contact-form不是一个有效的前缀。
我通过从路由器参数而不是从asPath获取国家来解决这个问题,因为它已经包含在page [country]的路由参数中。土耳其电信公司