8

我通过从下一个导入使用useRouter路由器next/router

我试图找到一个解决方案,当我更改 URL 的查询时,它不会滚动到页面顶部。有什么解决办法吗?我知道 Next 中的 Link 组件具有该选项,但我需要使用 Router 组件。我的下一个版本是 10.0.5。

const router = useRouter();

const changeCurrency = (newCurrency) => {
   //Do some stuff here

    Router.push({
        pathname: router.pathname,
        query: { ...router.query, currency: newCurrency.value },
    });
};
4

2 回答 2

27

router.push有一个scroll选项,它是true默认的。你可以像这样关闭它:

const router = useRouter();

async function navigate(newCurrency) {
  router.push({
    pathname: router.pathname,
    query: { ...router.query, currency: newCurrency.value },
  }, undefined, { scroll: false });
}

router.push接受选项对象中的大部分(如果不是全部)next/link道具。你可以在这里查看它们:https ://nextjs.org/docs/api-reference/next/link

于 2021-01-26T21:28:53.467 回答
-1

我的一个奇怪的解决方法。只需在视图中获取特定组件。就是这样。

import React, { useEffect, useRef } from 'react';


function MyAccount() {
  const containerRef = useRef(null);

  useEffect(() => {
    setTimeout(() => {
      containerRef.current.scrollIntoView({ behavior: 'smooth' });
    }, 250);
  }, []);

  return (
    <div ref={containerRef}>
   {/* It will be your particular component that needs to be shown  */}
        <UserInformation /> 
    </div>
  );
}

export default MyAccount;

有些人可能会觉得它很有用!这就是为什么我在这里发布这个。如果您想保留视图,scroll=false 是最好的解决方案。

于 2021-05-25T18:22:10.893 回答