我创建了一个带有暴露的BottomTabNavigator应用程序,这是我第一个使用react本机的项目。在最后一个选项卡上,我有一个带有几个元素的FlatList,这些元素应该在TabNavigation之外打开不同的视图。但是,当我单击ListView中的一个项时,我会得到以下错误: TypeError: undefined不是一个对象(计算‘item.导航’)。当我尝试使用道具时,也会发生这种情况,但是道具在我的项目中也不能正常工作。
我试着修复这两天,但我不知道更多。有人能帮我吗?另外,有人有一个很好的导航和道具指南吗?
App.tsx
export default function App() {
const isLoadingComplete = useCachedResources();
const colorScheme = useColorScheme();
if (!isLoadingComplete) {
return null;
} else {
return (
<SafeAreaProvider>
<Navigation colorScheme={colorScheme} />
<StatusBar />
</SafeAreaProvider>
);
}
}index.tsx
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
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
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>
);
}
}发布于 2020-09-14 16:18:04
您正在尝试访问作为支柱传递给MenuFlatList组件的导航,如下所示
<TouchableWithoutFeedback onPress={() => {
this.props.navigation.navigate('WebViewImprint');
}}>导航中的任何屏幕组件都将收到一个“导航”道具,您可以使用它导航到其他屏幕。
https://stackoverflow.com/questions/63884426
复制相似问题