Реагировать на навигацию по клику на пользовательский компонент - PullRequest
0 голосов
/ 16 марта 2020

Привет, у меня есть реактивный проект / EXPO, где у меня есть страница входа и asyncstorage, в то время как вы вошли в систему с помощью функции asyncstorage, страница входа будет скрыта, и у вас будет компонент HomeScreen. Но на странице входа, если вы нажмете Войти, тогда я не знаю, как перейти к HomeScreen. Затем я должен закрыть приложение и снова открыть, и функция asyncstorage находится в конструкторе, его загрузка и переход на HomeScreen

constructor(props) {
    super(props);
    this.state = ({
        isLoggedIn: 0,
        isLoading: 0
    })
    this.tryLogin();
}

tryLogin = async () => {
    let logged = 0;

    if(await AsyncStorage.getItem('isLoggedIn') === '1') {
        let email = await AsyncStorage.getItem('email');
        let password = await AsyncStorage.getItem('password');
        try {
            firebase.auth().signInWithEmailAndPassword(email, password).then(this.onLoginSuccess.bind(this))
        } catch (error) {
            await AsyncStorage.setItem('isLoggedIn', '0');
            logged = 0;
        }
    }
    this.setState({
        isLoading: 0,
    });
}

onLoginSuccess() {
    this.setState({
        email: '', password: '', error: '', isLoggedIn: 1
    })
}


render() {
    if (this.state.isLoading) {
        // We haven't finished checking for the token yet
        return <ActivityIndicator />;
    }

    return (
        <NavigationContainer>
            <Stack.Navigator
                screenOptions={{
                    headerShown: false
                }}
            >
                {this.state.isLoggedIn == 0 ? (
                    // No token found, user isn't signed in
                    <Stack.Screen
                        name="SignIn"
                        component={LoginScreen}

                    />
                ) : (
                    <Stack.Screen name="Home" component={HomeScreen} />
                )}
            </Stack.Navigator>
        </NavigationContainer>
    );
    return (
        <NavigationContainer>
            <Stack.Navigator>
                {this.state.isLoggedIn ? (
                    <>
                        <Stack.Screen name="Home" component={HomeScreen}/>
                        <Stack.Screen name="Settings" component={NotificationsScreen}/>
                    </>
                ) : (
                    <Stack.Screen name="SignIn" component={LoginScreen}/>
                )}
            </Stack.Navigator>
        </NavigationContainer>
    );
}

}

, но на экране входа в систему:

    constructor(props) {
    super(props);
    this.state = ({
        email: '',
        password: ''
    })
}

signUpUser = (email,password) =>{
    try {
        if (this.state.password.length < 6){
            alert("Please enter at least 6 characters")
            return;
        }
        firebase.auth().createUserWithEmailAndPassword(email,password)
    }
    catch (error) {
        console.log(error.toString())
    }

};

loginUser = (email,password) =>{
    try{
        firebase.auth().signInWithEmailAndPassword(email,password).then(function (user) {
            AsyncStorage.setItem('email',email);
            AsyncStorage.setItem('password',password);
            AsyncStorage.setItem('isLoggedIn','1');
            console.log(user);
            navigation.emit({
                type: 'transitionStart',
                data: { blurring: false },
                target: HomeScreen,
            });

        })
    }
    catch (error) {
        console.log(error.toString())
    }

};

Когда вы нажимаете кнопку там, я не знаю, как маршрутизировать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...