javascript - Next.js — router.push 将页面滚动到顶部,尽管滚动选项设置为 false
问题描述
我正在使用 Next.js 的内置国际化功能来更改我的应用程序的语言,除了一种不良行为外,一切都运行良好:
尽管将路由器的滚动选项设置为 false ,但调用该changeLanguage
函数会导致页面滚动到顶部。
请注意,当页面路由没有解决我的问题时, Next.js - router.push 不滚动到顶部并且Next.js 保持滚动位置。
import { useRouter } from "next/router";
import Select, { components } from "react-select";
const LanguageToggler = () => {
const router = useRouter();
const { locale, pathname, locales, asPath } = router;
const changeLanguage = (e) => {
const locale = e.value; // is equal to one of these values: ['en', 'sv', 'ru', 'fr']
router.push(pathname, asPath, { locale }, { scroll: false });
};
return (
<Select
...irrelevant
onChange={changeLanguage}
components={{
Option: CustomSelectOption,
}}
/>
)
};
export default LanguageToggler;
PS react-select 库用于显示标志的下拉列表,单击每个标志召唤changeLanguage
以相应地更新语言环境。
解决方案
接下来router.push接受三个参数。
router.push(pathname, asPath, { locale }, { scroll: false });
应该
router.push(pathname, asPath, { locale, scroll: false });
推荐阅读
- html - 从高度 0 到 100 的过渡元素,从底部开始
- vb.net - 带变量的数据列表达式
- c - 禁用 clang-tidy 诊断
- webgl - WebGL 德罗斯特效果
- javascript - 未找到模块:导入模块以做出反应时无法解析“axios”
- iccube - icCube 中是否可以有没有层次结构的维度?
- html - 如何包装 SVG
里面的元素 ? - excel - 投资公式
- amazon-cloudformation - 在不使用 Jenkins cloudformation 插件启动创建/更新堆栈后,如何从 Jenkins Job 跟踪 Cloudformation 事件?
- laravel - 收到错误消息一般错误:1364 字段“性别”没有默认值