【发布时间】:2021-12-31 16:00:20
【问题描述】:
我遇到了useRouter 和useEffect 的问题,如果不满足某个条件,我想重定向用户。
在第 1 页上,您选择一个 amount,该amount 被传递到上下文中并在第 2 页上被检索。
在第 2 页我有这种情况:
import { useEffect, useContext } from "react";
import { useRouter } from "next/router";
import AppContext from "../context/AppContext";
const PageTwo = () => {
const { amount } = useContext(AppContext);
const router = useRouter();
useEffect(() => {
if (!amount || amount == null) {
router.push("/page-1"); // redirect if no amount is selected
}
});
return (
...
);
};
当我们到达第 2 页时,我有 amount,但是当您刷新页面时,即使设置了 amount,它也会将您引导回 page-1。当您直接转到page-2 时,它工作正常,而不在page-1 上选择金额,它会将您重定向回page-2。
在这种情况下,上下文 API 和/或 useRouter 和 useEffect 的工作方式可能有问题。
这是一个有问题的 CodeSanBox 示例:
https://codesandbox.io/s/next-js-userouter-with-useeffect-6645u?file=/pages/page-2.js
【问题讨论】:
-
如果您在“AppContext”中保持“amount”状态并且用户进行页面刷新,“amount”状态将是它的默认值。你确定吗? “当您刷新页面时,即使设置了数量,它也会将您引导回第 1 页。”
-
没错。即使设置了
amount,在page-2上的页面刷新时,它也会直接返回page-1。当控制台记录数量时,您可以看到它在那里。也许我会设置一个快速的 CodeSandBox 来详细说明自己。 -
你得到未定义的瞬间导致重定向回第 1 页。
-
这很奇怪,因为在设置数量时,它也被存储在 localStorage 中。关于如何解决这个问题的任何想法?也许有更好的方法来处理这个问题。
标签: reactjs next.js use-effect context-api next-router