警告:数组或迭代器中的每个子节点都应该有一个唯一的“键”道具

Warning: Each Child in an Array or Iterator Should Have a Unique “Key” Prop

本文关键字:有一个 唯一 道具 子节点 数组 迭代器 警告      更新时间:2023-09-26

当我使用选取器项目映射数组时,我收到以下警告:

数组中的每个子节点都应该有一个唯一的"键"道具。

这是我的代码

var locationArray = [{"name":"canada","id":"2"},{"name":"sweden","id":"3"}];
var Locations = locationArray.map(function(result) {
return <Picker.Item label={result.name} value={result.id} /> ;
});
return (
    <ScrollView contentContainerStyle={styles.contentContainer}>
        <View style={styles.container}>
            <Picker selectedValue={this.state.location} onValueChange={(location) => this.setState({location:location})} style={[styles.picker, {color: '#2E3740'}]}>
                {Locations}
            </Picker>
        </View>
    </ScrollView>
);

更好的性能

这是 reactjs 的建议,以提高渲染性能。通过为每个动态创建的元素提供一个唯一的键,可以最大限度地减少可能的 DOM 更改。

更新您的代码

使用每个元素的 id 作为唯一键。或者,是否可以使用每个元素的索引。

var locationArray = [{"name":"canada","id":"2"},{"name":"sweden","id":"3"}];
var Locations = locationArray.map(function(result) {
return <Picker.Item key={result.id} label={result.name} value={result.id} /> ;
});
return (
    <ScrollView contentContainerStyle={styles.contentContainer}>
        <View style={styles.container}>
            <Picker selectedValue={this.state.location} onValueChange={(location) => this.setState({location:location})} style={[styles.picker, {color: '#2E3740'}]}>
                {Locations}
            </Picker>
        </View>
    </ScrollView>
);

即使我也遇到了相同的警告消息,并且能够通过向返回对象添加唯一键来克服它,如下面的代码所示。

带有警告消息的代码

 getBatchList() {
    return this.state.availableBatch.map((data) => {
        return (
            <RadioButton value={data.label}>
                <Text style={styles.batchText}>{data.label}</Text>
            </RadioButton>   
        )
    })
 }

不带警告消息的代码

 getBatchList() {
    //LIKE THIS
    var keyId=1;
    return this.state.availableBatch.map((data) => {
        return (
            <RadioButton value={data.label} key={keyId}>
                <Text style={styles.batchText}>{data.label}</Text>
            </RadioButton>   
        )
        keyId = keyId+1;
    })
}
相关文章: