При сабмите в форме логина в localstorage должен ставится true, но в localstorage ставится false и при последующей перезагрузке страницы профиль пропадает и снова появляется авторизация.
Почему так?
Вот редакс слайс:
import { createSlice, PayloadAction } from "@reduxjs/toolkit"
import { AuthSliceState } from "./types";
import { getAuthFromLS } from "@/utils/getAuthFromLS";
const initialState: AuthSliceState = {
isAuth: getAuthFromLS(),
}
export const AuthSlice = createSlice({
name: 'auth',
initialState,
reducers: {
setIsAuth(state, action: PayloadAction<boolean>) {
state.isAuth = action.payload;
}
}
})
export const { setIsAuth } = AuthSlice.actions;
export default AuthSlice.reducer;
Вот функция получения значения с localstorage:
export const getAuthFromLS = (): boolean => {
const data = localStorage.getItem('auth');
const auth = data ? JSON.parse(data) : [];
return auth;
}
Вот сабмит в авторизации:
const dispatch = useDispatch();
const isAuth = useSelector(isAuthSelector);
const isMounted = useRef(false);
const navigate = useNavigate();
useEffect(() => {
if (isMounted.current) {
const json = JSON.stringify(isAuth);
localStorage.setItem('auth', json);
}
isMounted.current = true;
}, [isAuth]);
const handleSubmit = (event: React.FormEvent<HTMLFormElement>) => {
event.preventDefault();
dispatch(setIsAuth(true));
navigate('/');
}
Вот logout:
useEffect(() => {
if (isMounted.current) {
const json = JSON.stringify(isAuth);
localStorage.setItem('auth', json);
}
isMounted.current = true;
}, [isAuth]);
const handleLogout = () => {
if (confirm('Are you sure you want to exit?')) {
dispatch(setIsAuth(false));
navigate('/');
}
}