Навигатор стека React Navigator 5 и навигатор ящиков вместе - PullRequest
0 голосов
/ 07 августа 2020

В основном я из реакции-навигации v4, мне знакомо то же самое с SwitchNavigator в качестве моста, но v5 не поддерживает SwitchNavigator, поэтому немного изо всех сил пытается понять приведенную ниже реализацию. Приведенный выше код работает, но есть некоторые проблемы, например:

  1. При загрузке приложения ящик изначально виден и скрывается при загрузке приложения.
  2. Я не хочу иметь ящики для Экраны аутентификации. Если у меня есть 2 разных режима навигации без разделения AuthenticationStack и UserStack , тогда я столкнулся с проблемой при переходе с Войти в профиль и наоборот

ОБНОВЛЕНИЕ 1

export default() => {
    const [logged, setUser] = React.useState(false);
    return (
        <NavigationContainer>
            {
                logged
                ?
                <DrawerScreen initialParams={{ setUser }} />
                :
                <AuthStackScreen initialParams={{ setUser }} />
            }
        </NavigationContainer>  
    );
}

Теперь в логине. js, мне нужно обновить setUser до true, верно? Если да, то как я могу получить доступ к setUser в моем логине. js файл

Обновление 2

class Login extends Component {
    fetch(login_url, {
            method: "POST",
            headers: { 'Accept': 'application/json', 'Content-Type': 'application/json', 'Accept-Language': 'en-US' },
            body: JSON.stringify(data)
        })
        .then((response) => {
            const success = response.ok;
            const data = response.json();
            return Promise.all([success, data]);
        })
        .then(([success, response]) => {
            var data, userInfo;
            if (success) {
                data = {
                    token: response.token,
                    user: response.user,
                }
    
                if(_storeUserData(response)) {
                    _retrieveUserData().then((userInfo) => {
    
                        this.setState({
                            logged: true,
                            userInfo: userInfo,
                            loading:false,
                            email: '',
                            password: ''
                        });
                        navigate('Profile');
                    })
                    .catch((error) => {
                        // alert(error);
                    });
                }
            }
            this.setState(state_data);
        })
        .catch((error) => {
            alert('Error:'+error);
            this.setState({ loading: false});
        });
}

1 Ответ

1 голос
/ 07 августа 2020

Вы можете создать что-то похожее на навигатор переключателей, условно отрисовав навигаторы, как показано ниже.

export default function App() {
  const [loggedIn, setLoggedIn] = React.useState(false);
  return (
    <NavigationContainer>
      {loggedIn ? (
        <Drawer.Navigator initialRouteName="Home">
          <Drawer.Screen name="Home" component={HomeScreen} initialParams={{ setLoggedIn }}/>
          <Drawer.Screen name="Notifications" component={NotificationsScreen} />
        </Drawer.Navigator>
      ) : (
        <Stack.Navigator>
          <Stack.Screen
            name="Auth"
            component={AuthScreen}
            initialParams={{ setLoggedIn }}
          />
        </Stack.Navigator>
      )}
    </NavigationContainer>
  );
}

Вы можете попробовать эту закуску для рабочего примера https://snack.expo.io/@guruparan / switchsample

...