【问题标题】:React Native: where to place Navigators for other screens?React Native:在哪里放置其他屏幕的导航器?
【发布时间】:2020-10-24 23:05:20
【问题描述】:

我的应用程序有一个BottomTabNavigator,每个选项卡都链接到一个组件,即StackNavigator。 通过该实现,我可以轻松地在选项卡屏幕之间切换并查看详细屏幕。

这是我的 Screen 组件的代码:

export default function Screen ({props, children}) {
    
    return (
        <>
        <Stack.Navigator
            screenOptions={{
                cardShadowEnabled: false,
                header: (props) => {
                    return <Header {...props} />
                },
            }}
        >
            <Stack.Screen name="Settings" component={SettingsScreen} />
        </Stack.Navigator>
        <SafeAreaView style={styles.screen}>
            <View style={styles.container}>{ children }</View>
        </SafeAreaView>
        <TabNavigator i18n={i18n}/>
        </>
    );
}

在标题组件中,我有一个图标,onPress 需要导航到 SettingsScreen。

恐怕我不确定这是否是 SettingsNavigator 的正确实现,如果是,如何单击我的标题菜单导航到 SettingsScreen。

这是我的 Header.js 代码:

export default function Header (props, navigation) {
    ...
    return (
        <View style={styles.container}>
            <View style={styles.link} onPress={navigation.navigate("Settings")}>
                <MaterialCommunityIcons name="tune" size={32} />
            </View>
        </View>
    )
};

我收到一个错误:

TypeError:navigation.navigate 不是函数。(在 'navigation.navigate("Settings")', 'navigation.navigate' 未定义)

如何从我的 Header 组件访问导航?

【问题讨论】:

    标签: react-native react-navigation


    【解决方案1】:

    我不认为这是一个正确的实现。

    请尝试如下

    <Stack.Navigator
      initialRouteName={Routes.SignIn}
      screenOptions={{
        cardShadowEnabled: false,
    
        header: (props) => {
          return <Header {...props} />
        },
      }}
    >
      <Stack.Screen name={Routes.SignIn} component={SignInScreen} />
      <Stack.Screen name={Routes.ForgotPassword} component={ForgotPasswordScreen} />
      <Stack.Screen name={Routes.SignUp} component={SignUpScreen} />
    </Stack.Navigator>
    

    【讨论】:

    • 我已经更改了实现,但现在我收到以下错误:无法注册导航器。您是否使用 NavigationContainer 包装了您的应用程序。这可能是因为 TabNavigator。但是如何在每个屏幕上同时拥有两者?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-22
    相关资源
    最近更新 更多