首页 > 解决方案 > ReactJs/NextJS - 5 秒后自动重定向到另一个页面

问题描述

Console.log() 总是返回 5,所以基本上在前端我总是看到这句话:欢迎,您已成功登录,您将被重定向.. 4

看起来像这样,因为 setRedirectSeconds() 是异步的,它不会立即更新状态,每当我的 setInterval 函数再次启动时,redirectSeconds 每次仍然是 5。

如何解决?

这是我的代码:

const Welcome: NextPage = (): ReactElement => {
const [redirectSeconds, setRedirectSeconds] = useState<number>(5);
const router = useRouter();
const query = router.query;

useEffect(() => {
    if (query?.redirect) {
        setTimeout(() => {
            const interval = setInterval(() => {
                console.log(redirectSeconds);
                if (redirectSeconds > 0) {
                    setRedirectSeconds(redirectSeconds - 1);
                } else {
                    clearInterval(interval);
                    router.push(query.redirect.toString());
                }
            }, 1000)
        }, 1000);
    }
}, []);

return (
        <div>
            Welcome, you have successfully logged in, you will be redirected in.. {redirectSeconds}
        </div>
);
};

export default Welcome;

标签: reactjsnext.js

解决方案


这是我调整它的方法,现在它工作正常:

  • 我删除了 setInterval 并添加了对 useEffect 函数的依赖。我在减少redirectSeconds 之前添加了1000 毫秒的超时。

     useEffect(() => {
     if (query?.redirect) {
         if (redirectSeconds == 0) {
             router.push(query.redirect.toString());
             return;
         }
    
         setTimeout(() => {
             console.log(redirectSeconds);
             setRedirectSeconds((redirectSeconds) => redirectSeconds - 1);
         }, 1000)
     }
    }, [redirectSeconds]);
    

推荐阅读