You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Next.js中router.push设置scroll: false仍自动滚动问题求助

解决Next.js App Router中router.push加参数后页面滚顶的问题

你在使用App Router的useRouter做shallow路由更新时,设置了scroll: false但页面还是会滚到顶部,这是因为App Router里shallow路由更新的scroll配置存在特殊行为,初始渲染的滚动逻辑可能会覆盖你的设置。下面给两个可行的解决办法:

方案一:手动记录并恢复滚动位置

执行路由更新前先记下当前滚动位置,更新完成后再把页面滚回去,这种方式直接控制浏览器滚动行为,比依赖框架配置更可靠:

"use client";

import { useRouter } from "next/navigation";
import { useEffect } from "react";

const MyComponent = ({ pageNumber }) => {
    const router = useRouter();

    useEffect(() => {
        if (!pageNumber || pageNumber === null || pageNumber === "") {
            // 记录当前滚动高度
            const currentScroll = window.scrollY;
            // 执行路由更新
            router.push(`?pageNumber=1`, undefined, { shallow: true });
            // 下一帧恢复滚动位置
            requestAnimationFrame(() => {
                window.scrollTo(0, currentScroll);
            });
        }
    }, [pageNumber, router]);
};

export default MyComponent;

注意把pageNumber和router加入useEffect的依赖数组,避免闭包问题或者不必要的重复执行。

方案二:先检查现有参数再更新

结合useSearchParams先判断URL里有没有目标参数,避免无意义的路由更新,同时配合手动恢复滚动:

"use client";

import { useRouter, useSearchParams } from "next/navigation";
import { useEffect } from "react";

const MyComponent = ({ pageNumber }) => {
    const router = useRouter();
    const searchParams = useSearchParams();

    useEffect(() => {
        const existingPage = searchParams.get("pageNumber");
        // 只有当props里的pageNumber为空,且URL里也没有pageNumber参数时才执行更新
        if (!pageNumber && (!existingPage || existingPage === "")) {
            const currentScroll = window.scrollY;
            router.push(`?pageNumber=1`, undefined, { shallow: true });
            requestAnimationFrame(() => window.scrollTo(0, currentScroll));
        }
    }, [pageNumber, searchParams, router]);
};

export default MyComponent;

为什么原来的scroll: false不生效?

在App Router的shallow路由更新场景下,框架内部的初始滚动处理逻辑可能会忽略scroll: false配置,尤其是在组件首次渲染时执行路由更新的情况。手动控制滚动位置可以绕过这个问题,直接达到你想要的效果。

内容的提问来源于stack exchange,提问作者Giorgos Karras

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 00:53:20