首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将导航5堆栈导航器和抽屉导航器组合在一起

将导航5堆栈导航器和抽屉导航器组合在一起
EN

Stack Overflow用户
提问于 2020-08-07 00:34:05
回答 1查看 1.3K关注 0票数 0

基本上,我来自react导航v4,我熟悉使用SwitchNavigator作为桥接器,但是v5不支持SwitchNavigator,所以很难理解下面的实现。

代码语言:javascript
复制
const Stack = createStackNavigator();
const Drawer = createDrawerNavigator();

function AuthenticationStack({ navigation }) {
    return (
        <Stack.Navigator initialRouteName="Home" screenOptions={{headerShown: false}}>
            <Stack.Screen name="Home" component={Home} />
            <Stack.Screen name="Login" component={Login} />
            <Stack.Screen name="Registration" component={Registration} />
        </Stack.Navigator>
    );
}

function UserStack({ navigation }) {
    return (
        <Stack.Navigator initialRouteName="Jobs" screenOptions={{headerShown: false}}>
            <Stack.Screen name="Jobs" component={Profile} />
            <Stack.Screen name="JobDetails" component={JobDetails} />
        </Stack.Navigator>
    );
}

function App() {
    return (
        <NavigationContainer>
            <Drawer.Navigator drawerContent={props => <SideBar { ...props } />}>
                <Drawer.Screen name="Home" component={AuthenticationStack} />
                <Drawer.Screen name="Jobs" component={UserStack} />
            </Drawer.Navigator>
        </NavigationContainer>
    );
}

export default App;

上面的代码可以工作,但是有一些问题,比如,

在加载应用程序时,最初的抽屉是可见的,并在应用程序加载时隐藏起来。AuthenticationStack

  • 我不希望有用于身份验证屏幕的抽屉,如果我有两个不同的导航而没有拆分和UserStack,那么我在从登录导航到Profile和副时会遇到问题。

更新1

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

现在在login.js中,我需要将setUser更新为true,对吗?如果是,如何访问login.js文件中的login.js

更新2

代码语言:javascript
复制
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});
        });
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-07 04:38:12

通过有条件地呈现导航器,您可以创建类似于开关导航器的内容,如下所示。

代码语言:javascript
复制
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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63293586

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档