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

时间:2020-04-08 08:59:16

标签: react-native react-native-flatlist

我有以下代码,出现错误“警告:列表中的每个孩子都应该有一个唯一的键道具”。我检查了一下文档,据我所知代码应该没问题,因为每个值使用的键都不同,并且位于最外层。

<FlatList
  style={styles.shiftsList}
  numColumns={1}
  data={shifts}
  renderItem={shift => (
    <View key={shift.item.BookingNo} style={styles.row}>
      <Button 
        title="Actions"
        onPress={() => console.log('Action Pressed: ${shift.item.BookingNo}')}
        />
      <Text style={styles.item}>{shift.item.Day}</Text>
      <Text style={styles.item}>{shift.item.Date}</Text>
      <Text style={styles.item}>{shift.item.ShiftType}</Text>
      <Text style={styles.item}>{shift.item.Location}</Text>
    </View> 
  )}
  keyExtractor={(item, index) => {item.BookingNo}}
/>

Edit: Shift Data
```const [shifts, setShifts] = useState([{BookingNo: 192, Day: 'Mon', Date: '21/02', ShiftType: 'Night', Start: '08:00:00', Finish: '20:00:00', Location: '23 Tiger woods row'}, {BookingNo: 256, Day: 'Mon', Date: '21/02', ShiftType: 'Night', Start: '08:00:00', Finish: '20:00:00', Location: '25 Tiger woods row'}, {BookingNo: 335, Day: 'Mon', Date: '21/02', ShiftType: 'Night', Start: 
'08:00:00', Finish: '20:00:00', Location: '29 Tiger woods row'}]);

2 个答案:

答案 0 :(得分:0)

我注意到,对于关键道具,您正在使用shift.item.BookingNo,但是对于keyExtractor,您仅使用了item.BookingNo。

我的猜测是您的keyExtractor应该如下所示:

keyExtractor={(shift, index) => {shift.item.BookingNo}}

答案 1 :(得分:0)

事实证明,这仅仅是由于键必须是字符串。

改变 keyExtractor={(item, index) => {item.BookingNo}} 进入 keyExtractor={(item, index) => item.BookingNo.toString()}

为我修复了