开发者问题收集

尝试在屏幕之间传递数据但出现 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