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