- 我正在创建欢迎页面,该页面应在客户登录后立即显示,并且该页面应在5秒后自动将客户重定向到另一个页面。我尝试使用setState,默认值为5秒,然后使用setInterval,将其减少1,当达到0时,重定向客户。
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;
3条答案
按热度按时间sqyvllje1#
下面是我如何调整它,现在它的工作正常:
aurhwmvo2#
您可以使用下面的自定义挂钩来实现此功能。
用法示例:
k5ifujac3#
设置顶级状态变量。当它达到0时,重定向用户
内部useEffect写入
setInterval
,在1000ms后将计数减1然后编写消息。