尝试在屏幕之间传递数据但出现 TypeError:undefined 不是对象(评估“route.params.item”)
2022-08-12
72
const HomeScreen = ({ navigation }) => {
const [reviews, setReviews] = useState([
{ title: 'Zelda, Breath of Fresh Air', rating: 5, body: 'lorem ipsum', key: '1' },
{ title: 'Gotta Catch Them All (again)', rating: 4, body: 'lorem ipsum', key: '2' },
{ title: 'Not So "Final" Fantasy', rating: 3, body: 'lorem ipsum', key: '3' },
]);
return (
<View style={styles.home}>
<StatusBar style="auto" />
<FlatList
data={reviews}
renderItem={({ item }) => (
<TouchableOpacity onPress={() => navigation.navigate('Reviews', { item })}>
<Text style={styles.homeText}>{item.title}</Text>
</TouchableOpacity>
)}
/>
</View>
)
};
const ReviewsScreen = ({ navigation, route}) => {
const { item } = route.params;
return (
<View style={styles.container}>
<StatusBar style="auto" />
<Text style={styles.homeText}>{item.title}</Text>
<Text style={styles.homeText}>{item.body}</Text>
<Text style={styles.homeText}>{item.rating}</Text>
<View style={styles.button}>
<Button title='home' color={'coral'} onPress={() => navigation.goBack()}/>
</View>
</View>
);
};
3个回答
错误不言而喻。
为了调试它,您首先需要在
ReviewsScreen
中记录
route
。
试试这个:
console.log(route)
看看它的属性中是否有
item
?
这就是您应该调试问题的方式。
在没有看到日志的情况下,我最好的猜测是您错误地将参数发送到子屏幕。
也许你应该试试这个?
navigation.navigate('Reviews', item)
Shameel Uddin
2022-08-13
您收到
TypeError: undefined is not an object (evaluating'route.params.item')
错误,因为您没有为
item
分配任何值,并且下一个屏幕获取的是
undefined
值,因此您必须像这样分配值
navigation.navigate('Reviews',{item:item})
有关更多详细信息,您可以查看官方 React Navigation 文档
Anuj Sharma
2022-08-13
发现问题,我没有将数据发送到屏幕,而是将其发送到堆栈组件...
Gun
2022-08-14