Проблемы с входом/выходом в React Native AsyncStorage с бэкендом Django
Я создаю свое первое приложение на React Native и нахожусь в процессе создания функций входа/выхода из приложения. Я пытаюсь использовать AsyncStorage для запоминания пользователя. Но я столкнулся с несколькими проблемами:
1- когда я пытаюсь войти в систему, поместив пользователя в AsyncStorage, это работает и я получаю имя пользователя, однако когда я пытаюсь использовать его без входа в систему (чтобы он запомнил пользователя), я получаю Promise {
"_U": 0,
"_V": 0,
"_W": null,
"_X": null,
}
2- Когда я пытаюсь использовать AsyncStorage.removeItem(), а затем закрываю приложение, приложение по-прежнему автоматически регистрирует пользователя.
вот мой код:
login.js
home.js-
Как я могу решить эти проблемы?
ch
является асинхронной функцией. При вызове console.log(ch())
ожидается печать Promise
объекта.
Затем вы проверяете результат:
const c = ch();
if (c == false) {
...
} else {
props.navigation.navigate('Home')
}
Объект c
является объектом Promise
, поэтому вы переходите к объекту Home
.
В React не следует запускать побочные эффекты непосредственно в теле рендеринга. Для этого используйте эффекты:
useEffect(() => {
const ch = async () => {
const c = await getData();
if (c) {
props.navigation.navigate("Home");
}
};
ch();
}, [...]); // be careful with dependencies
Проверьте, вошел ли пользователь в систему или нет в useEffect
e.g.
useEffect(() => {
checkLogin()
.then(res => {
if (res == true) {
//Navigate to home screen code
}
else {
//Navigate to Login/Signup screen code
}
})
}, [])
Проверить метод входа
const checkLogin = async () => {
const res = await AsyncStorage.getItem('@userauthkey')
return res
}
App.js
export default function App() {
React.useEffect(() => {
checkLogin()
.then(res => {
if (res == true) {
//Navigate to home screen code
}
else {
//Navigate to Login/Signup screen code
}
})
}, [])
const checkLogin = async () => {
const res = await AsyncStorage.getItem('@userauthkey')
return res
}
//rest of your code
}