Проблемы с входом/выходом в 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
}
Вернуться на верх