reactjs 从URL nextjs滚动到同一页面上的某个部分

91zkwejq  于 2023-04-29  发布在  React
关注(0)|答案(1)|浏览(116)

我正在使用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);
  };
}, []);
.....

有人知道如何解决这个问题吗?

vlju58qv

vlju58qv1#

经过几个小时的调试,我意识到问题不是在URL中追加“#contact-form”,而是与URL相关,而是由于头中的一个组件导致了水合不匹配,这个组件使用

router.asPath.split("/")[0]

这里的问题是,这一行不仅从www. example中提取了国家前缀 www.example.com ,但所有行包括#contact-form。
因此,有一个组件在第一次加载时呈现,但后来消失了,因为这个组件需要一个国家前缀,而es#contact-form不是一个有效的前缀。
我通过从路由器参数而不是从asPath获取国家来解决这个问题,因为它已经包含在page [country]的路由参数中。土耳其电信公司

相关问题