0

您好,我正在尝试使用 react native 构建一个迷你社交媒体应用程序,但出现以下错误:

警告:列表中的每个孩子都应该有一个唯一的“关键”道具。

查看 VirtualizedList 的 render 方法

也尝试使用 results.map 而不是平面列表。并且还使用stackoverflow上的解决方案更改密钥提取器,但没有成功。任何人都可以帮忙吗?

代码:

    return (
    <FlatList
      style={{flex:1}}
      data={results}
      keyExtractor={(item, index) => {
        return item.id;
      }} 
      renderItem={({item}) => <TouristCard key={item.id} item={item} onPress={()=> navigation.navigate('HomeProfile', {userId: item.userId})} /> }
    />
);

旅游卡:

const TouristCard = ({item,onPress}) => {

return (   
    <View key={item.id} style={styles.listItem} >
      <UserImg  source={{uri: item.userImg ? item.userImg : 'https://lh5.googleusercontent.com/-b0PKyNuQv5s/AAAAAAAAAAI/AAAAAAAAAAA/AMZuuclxAM4M1SCBGAO7Rp-QP6zgBEUkOQ/s96-c/photo.jpg'}}/>
      <View style={{alignItems:"center",flex:1}}>
        <Text style={{fontWeight:"bold"}}>{item.fname ? item.fname : 'Annonymous' } {item.lname ? item.lname : '' }</Text>
        <Text>{item.flightDesc}</Text>
        <Text style={{fontWeight:"bold"}}>{item.age}</Text>
      </View>
      <Text style={{color:"blue"}}>View Profile</Text>
    </View>
);

结果对象:

   const filterByDates = (results,startDate,endDate) => {
    return results.filter(res => {
        return startDate<res.endDate && res.startDate<endDate;
    });
};

useEffect(() => {
    const fetchCommunity = async() => {
        try {
            //const list = [];
            await firestore()
            .collection('flights')
            .where("destination","==",destination)
            .where("user","!=",user.uid)
            .get()
            .then((querySnapShot) => {
                querySnapShot.forEach(doc => {
                    const {user,flightDesc,startDate,endDate} = doc.data();
                    list.push({
                        user: user,
                        flightDesc,
                        startDate,
                        endDate
                    });
                })
                
            })  
            setResults(filterByDates(list,startDate,endDate));
            fetchProfiles();
        } catch(e) {
            console.log(e);
        }
    }
    const fetchProfiles = async() => {
        try {
            //const list2=[];
            list.forEach(async obj => {
                await firestore()
                .collection('users')
                .where("userId","==",obj.user)
                .get()
                .then((querySnapShot) => {
                querySnapShot.forEach(doc => {
                    const {userImg,age,fname,lname} = doc.data();
                    list.push({
                        id: doc.id,
                        userImg,
                        age,
                        fname,
                        lname
                    });
                })
                
            })  
            setResults(list);
            console.log(list);
            })
        } catch (e) {
            console.log(e);
        }
    }
    fetchCommunity();
},[]);
4

1 回答 1

0

用这个替换你Flatlist的。

<FlatList
   style={{flex:1}}
   data={results}
   keyExtractor={(item) => item.id.toString()} // Here was the error
   renderItem={({item}) => <TouristCard item={item} onPress={()=> navigation.navigate('HomeProfile', {userId: item.userId})} /> }
/>

还要检查您的每个元素是否results具有唯一性id

并且MAIN点...检查您的数组项是否有一个名为的属性id..如果userId是唯一的,则使用它,如上所示

于 2021-04-24T19:34:22.903 回答