I'm using react-router-dom6 & redux-toolkit & antd form and I'm saving the token to localstorage. what I want is that after logging in, redirecting to dashboard page but instead it redirects to empty page with the same url of dashboard & when I reload the dashboard page contents displayed
routes.tsx
{!token ? (
<Routes>
<Route path="/" element={<Navigate to="/login" />} />
<Route path="/login" element={<Login />} />
<Route path="/signUp" element={<SignUp />} />
<Route path="/resetPassword" element={<ResetPassword />} />
</Routes>
) : (
<>
<Sidebar collapsed={collapsed} />
<Layout className="site-layout">
<Header collapsed={collapsed} collapseHandler={collapseHander} />
<div className="contentContainer">
<Routes>
<Route path="/" element={<Navigate to="/dashboard" />} />
<Route path="/dashboard" element={<Dashboard />} />
{role === "1" && <Route path="/groupList" element={<GroupList />} />}
<Route path="/newOrder" element={<NewOrder />} />
</Routes>
</div>
<Footer>footer</Footer>
</Layout>
</>
)}
loginSlice.ts
export const postLogIn = createAsyncThunk(
"login/postLogIn",
({ email, password }: Login, { dispatch }) => {
return axios
.post("/login", {
email,
password
})
.then((response) => {
successMessage(response.data.status);
if (response.status === 200) {
console.log(response.data.data, "login");
localStorage.setItem("token", response.data.data.Token);
localStorage.setItem("role", response.data.data.role);
localStorage.setItem("user_id", response.data.data.user_id);
localStorage.setItem("user_name", response.data.data.full_name);
localStorage.setItem("email", response.data.data.email);
}
})
.catch((err) => {
errorMessage(err.message);
});
}
);
const logInSlice = createSlice({
name: "login",
initialState,
reducers: {},
extraReducers: (builder) => {
builder.addCase(postLogIn.pending, (state) => {
state.loading = true;
state.error = false;
});
builder.addCase(postLogIn.fulfilled, (state) => {
state.loading = false;
state.error = false;
});
builder.addCase(postLogIn.rejected, (state) => {
state.loading = false;
state.error = true;
});
}
});
export default logInSlice.reducer;
loginForm.tsx
const navigate = useNavigate();
const onFinish = (values: any) => {
dispatch(postLogIn(values));
if (!error) {
navigate("/dashboard", { replace: true });
}
};
<Form
className="form"
name="login-form"
wrapperCol={{
span: 24
}}
initialValues={{
remember: true
}}
onFinish={onFinish}
autoComplete="off">
---
</Form>