问题是登录时的“useNavigate”挂钩,我想重定向到Profil组件,而不丢失redux存储的全局状态。
这是我的应用程序组件
import Profile from './components/Profile.jsx';
import Login from './components/Login.jsx';
import Register from './components/Register.jsx';
import { Routes, Route } from 'react-router-dom';
function App() {
return (
<>
<Routes>
<Route path='/login' element={ <Login /> } />
<Route path='/register' element={ <Register /> } />
<Route path='/profile' element={ <Profile /> } />
</Routes>
</>
);
}
export default App
这是我的登录组件:
import React, { useState } from "react";
import { useNavigate } from 'react-router-dom';
import { useLoginMutation } from "../services/api";
const Login = (props) => {
const [username, setUsername] = useState("");
const [password, setPassword] = useState("");
const redirect = useNavigate();
const [login, { isLoading }] = useLoginMutation();
const onChangeUsername = (e) => {
const username = e.target.value;
setUsername(username);
};
const onChangePassword = (e) => {
const password = e.target.value;
setPassword(password);
};
const loginHandler = async (e) => {
e.preventDefault();
try {
const response = await login({ username, password }).unwrap()
if (response.data.accessToken) {
localStorage.setItem("user", JSON.stringify(response.data));
}
redirect('/profile');
} catch (err) {
console.log(err);
}
};
return (
<div className="col-md-12">
<div className="card card-container">
<img
src="//ssl.gstatic.com/accounts/ui/avatar_2x.png"
alt="profile-img"
className="profile-img-card"
/>
<form className='flex flex-col justify-around' >
<>
<label>Username</label>
<input value={username} name="username" placeholder='username' onChange={onChangeUsername} className='p-1' />
<label>Password</label>
<input value={password} name="password" placeholder='password' onChange={onChangePassword} className='mb-3 p-1' />
<button className='bg-blue-400 p-2 border rounded-md text-white font-bold ' onClick={loginHandler}>Login</button>
</>
</form>
</div>
</div>
);
};
export default Login
这是一个截图。
提交后,删除突变
我知道在重定向时,页面会重新加载,但我不知道如何在不重新加载的情况下导航
2条答案
按热度按时间fkaflof61#
[我正在使用React with Typescript ]
例如,使用
import { useNavigate } from "react-router";
const navigate = useNavigate();
和navigate("/login/");
对我来说很有效,而使用<Navigate>
标记效果不好。我根本没有使用localStorage,但由于我没有使用它,状态通过刷新来重置。无论如何,从某种意义上说,这看起来很棘手。hs1rzwqc2#
1.我阅读了有关redux存储以及创建它们并将它们连接到组件的方法
1.使用连接存储中的值而不是空字符串初始化组件状态
就这样了。