首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >响应本机BottomTabNavigator导航不工作

响应本机BottomTabNavigator导航不工作
EN

Stack Overflow用户
提问于 2020-09-14 12:32:59
回答 1查看 201关注 0票数 0

我创建了一个带有暴露的BottomTabNavigator应用程序,这是我第一个使用react本机的项目。在最后一个选项卡上,我有一个带有几个元素的FlatList,这些元素应该在TabNavigation之外打开不同的视图。但是,当我单击ListView中的一个项时,我会得到以下错误: TypeError: undefined不是一个对象(计算‘item.导航’)。当我尝试使用道具时,也会发生这种情况,但是道具在我的项目中也不能正常工作。

我试着修复这两天,但我不知道更多。有人能帮我吗?另外,有人有一个很好的导航和道具指南吗?

App.tsx

代码语言:javascript
复制
export default function App() {
  const isLoadingComplete = useCachedResources();
  const colorScheme = useColorScheme();

  if (!isLoadingComplete) {
    return null;
  } else {
    return (
      <SafeAreaProvider>
        <Navigation colorScheme={colorScheme} />
        <StatusBar />
      </SafeAreaProvider>
    );
  }
}

index.tsx

代码语言:javascript
复制
export default function Navigation({ colorScheme }: { colorScheme: ColorSchemeName }) {
  return (
    <NavigationContainer
      linking={LinkingConfiguration}
      theme={colorScheme === 'dark' ? DarkTheme : DefaultTheme}>
      <RootNavigator />
    </NavigationContainer>
  );
}

const Stack = createStackNavigator<RootStackParamList>();

function RootNavigator() {

  return (
    <Stack.Navigator screenOptions={{ headerShown: false }}>
      <Stack.Screen name="Root" component={BottomTabNavigator} />
      <Stack.Screen name="WebViewImprint" component={WebViewImprint} />
      <Stack.Screen name="MenuFlatList" component={MenuFlatList} />

      <Stack.Screen name="NotFound" component={NotFoundScreen} options={{ title: 'Oops!' }} />
    </Stack.Navigator>
  );
}

BottomTabNavigator.tsx

代码语言:javascript
复制
const BottomTab = createBottomTabNavigator<BottomTabParamList>();

export default function BottomTabNavigator() {
  const colorScheme = useColorScheme();

  return (
      { .... }
      <BottomTab.Screen
        name="TabMenu"
        component={TabMenuNavigator}
        options={{
          tabBarLabel: "Menü",
          tabBarIcon: ({ color }) => <TabBarIcon name="ios-code" color={color} />,
        }}
      />
    </BottomTab.Navigator>
  );
}

function TabBarIcon(props: { name: string; color: string }) {
  return <Ionicons size={30} style={{ marginBottom: -3 }} {...props} />;
}

const TabMenuStack = createStackNavigator<TabMenuParamList>();

function TabMenuNavigator() {
  const colorScheme = useColorScheme();

  return (
    <TabMenuStack.Navigator>
      <TabMenuStack.Screen
        name="TabMenu"
        component={TabMenu}
        options={{ 
          header: props => <StacknavigatorImage />,
          headerStyle: {
            backgroundColor: Colors[colorScheme].barBackgroundColor
          }
        }}
      />
    </TabMenuStack.Navigator>
  );
}

MenuFlatListComponent.tsx

代码语言:javascript
复制
const Item = ({ title } : {title: any}) => (
     <View style={styles.item}>
          <Text style={styles.title}>{title}</Text>
     </View>
);

export default class MenuFlatList extends React.Component {

     render(){

          return (
               <SafeAreaView style={styles.container}>
                    <FlatList style={styles.flatList}
                    data={DATA}
                    renderItem={({item} : {item: any}) => {
                         return (
                              <TouchableWithoutFeedback onPress={() => {
                                   item.navigation.navigate('WebViewImprint');
                              }}>
                                   <View style={styles.item}>
                                             <Image source={item.icon} style={styles.icon} />
                                             <Item title={item.title} />
                                   </View>
                              </TouchableWithoutFeedback>
                         );}
                         
                    }
                    keyExtractor={item => item.id}
                    />
               </SafeAreaView>
          );
     }
}
EN

回答 1

Stack Overflow用户

发布于 2020-09-14 16:18:04

您正在尝试访问作为支柱传递给MenuFlatList组件的导航,如下所示

代码语言:javascript
复制
  <TouchableWithoutFeedback onPress={() => {
         this.props.navigation.navigate('WebViewImprint');
   }}>

导航中的任何屏幕组件都将收到一个“导航”道具,您可以使用它导航到其他屏幕。

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

https://stackoverflow.com/questions/63884426

复制
相关文章

相似问题

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