Помогите решить проблему с Recoil библиотекой
Парни помогите решить проблему с Recoil библиотекой. Виснет приложение и оперативка взлетает до небес. При дебагинге проблем не обнаруживаю. Отправляют запрос за данными юзера и получаю ассинхронно данные. Проблема в строке setIsAuth(true). Не понятно, по документации я могу изменить значение используя хук useSetRecoilState. В принципе проблем с этим не должно возникать.
Изменяю значение в сторе:const isAuthentication = atom({ key: 'authStatus', default: false });
При клике сохраняю значение логина и пароля и делаю ассинхронный запрос за данным и получаю их в значении responseAuth. Но здесь проблем нет.
c
onst Login = () => {
const [nicknameInput, setNicknameInput] = useRecoilState(loginText);
const [password, setPassword] = useRecoilState(loginPassword);
const authDatas = useSetRecoilState(setAuthData);
const responseAuth = useRecoilValue(stateQuery);
const setIsAuth = useSetRecoilState(isAuthentication);
const [errorAuth, setErrorAuth] =
useState<SetStateAction<boolean | string>>(false);
const [loginLoading, setloginLoading] = useState(false);
const handleSubmit = (e: any) => {
e.preventDefault();
setloginLoading(true);
authDatas({ nickname: nicknameInput, password });
};
useEffect((): void => {
if (nicknameInput && password) {
const { success, message } = responseAuth;
if (!success) {
setErrorAuth(message);
setIsAuth(false);
setloginLoading(false);
}
setIsAuth(true);
setloginLoading(false);
}
}, [responseAuth]);
store/index.js:
const loginText = atom({ key: 'loginText', default: '' });
const loginPassword = atom({ key: 'loginPassword', default: '' });
const isAuthentication = atom({ key: 'authStatus', default: false });
const setAuthData = atom({
key: 'setAuthData',
default: { nickname: '', password: '' }
});
const stateQuery = selector({
key: 'stateQuery',
get: async ({ get }) => {
const { nickname, password } = get(setAuthData);
const response = await loginDataDB({ nickname, password });
const { success, token, nickname: responseNick } = response.data;
if (!success) {
return {
success,
message: `This login or password is not correct. Please repeat user data or
switch to register form`
};
}
authLocalStorage.setStorage(token, responseNick);
return { success, message: 'OK' };
}
});