【发布时间】:2020-11-22 15:24:01
【问题描述】:
我创建了一个名为AchievementBlock 的自定义组件,如下所示:
import React from 'react';
import { View, StyleSheet, Image, TouchableOpacity } from 'react-native';
const AchievementBlock = ({ onPress }) => {
return (
<TouchableOpacity onPress={onPress}>
<View style={styles.AchievmentBlockStyle}>
<Image source={require('../../assets/images/Placeholder_Achievement.png')} />
</View>
</TouchableOpacity>
)
}
并在我的 UserProfileScreen 中将该组件用作 FlatList,并提供以下数据:
const tournaments = [
{ title: 'Tournament Title #1', placement: '2nd', desc: 'Description Here', logo: require('../../assets/images/TournamentLogo.png') },
{ title: 'Tournament Title #2', placement: '1st', desc: 'Description Here', logo: require('../../assets/images/TournamentLogo.png') },
{ title: 'Tournament Title #3', placement: '3rd', desc: 'Description Here', logo: require('../../assets/images/TournamentLogo.png') },
]
然后我返回如下:
return (
<View style={styles.container}>
<FlatList
data={tournaments}
numColumns={3}
keyExtractor={(tournaments) => {tournaments.title}}
renderItem={({ item }) => {
return (
<AchievementBlock
title={item.title}
placement={item.placement}
onPress={() => navigation.navigate('Achievement')}/>
)
}}
/>
</View>
)
现在,当我点击每个呈现的 FlatList 项目的数据时,我一直坚持将其拉到一个新屏幕。
新闻会是这样的:
onPress={() => navigation.navigate('Achievement', {item.title, item.placement, item.logo, item.desc})}
但这不起作用,而且我仍然是 React Native 的初学者,我似乎无法找到解决方案,通过 navigation.getParam() 函数正常地将每个项目数据拉到该屏幕。
我做错了什么以及如何在最佳实践中实现这一点?
【问题讨论】:
-
使用以下
{ ...item }解构项目,例如navigation.navigate('Achievement', { ...item})
标签: react-native react-navigation react-native-flatlist