开发者问题收集

useNavigate 不工作 react-router-dom v6

2022-01-27
31286

我正在使用 react-router-dom v6,并且从 location 对象访问 from 值,它给出了 pathname ,但是在执行 navigate(from,{replace:true}) 时它不起作用。

const navigate = useNavigate();
const { state } = useLocation();
const from = state ? state.from.pathname : '/';
const [isDone, setIsDone] = useState(false);
  useEffect(() => {
    if (isDone) {
      navigate(from, { replace: true }); //not working
    }
  }, [isDone]);
const Submit = async (e) => {
    e.preventDefault();
    let data = { email, password };

    if (!email || !password) {
      setMessage('Please Enter All Fields');
    } else {
      setLoading(true);
      return await axios
        .post('/signin', data)
        .then((res) => {
          if (res.data.message === 'Invalid Credentials') {
            setMessage('Invalid Credentials');
          }
          if (res.data.message === 'Logged In') {
            setIsDone(true);
          }
        })
        .catch((err) => {
          console.log(err);
        })
        .finally(() => {
          setLoading(false);
        });
    }
3个回答

修复了您的CSB后,我会看到重定向的工作。问题在于 auth app 中的值不会更改,因为您的登录流程未设置 logged_in_status 存储在localStorage中的值。结果是将用户直接返回到 “/signin” 路由。

您还应该序列化/对保存/从LocalStorage的访问/访问数据进行序列化/验证。

app

159763152

使用布尔表达式检查 auth> auth 在路由包装中的值。

259240841

signin

在这里,您只需要设置 true “ Logged_in_status” 在成功身份验证后将其设置为LocalStorage。我还没有看到设置 完成 状态的真正需要;经过身份验证时,您可以简单地发行命令重定向。

357142815

“

Drew Reese
2022-01-27

我认为问题出在“/”,请将其从 URL 中删除,然后重试。

navigate(from.replace('/', '') , { replace: true });
Rahul Sharma
2022-01-27

我只是简单地使用:

import { useNavigate } from 'react-router-dom';
...
const navigate = useNavigate();
...
<Button onClick={() => navigate('../login', { replace: true })}>LogOut</Button>

所以,我在路线之前添加了 ../replace: true

参考:- React Router v6...

Deepak Singh
2022-08-23