警告:数组或迭代器中的每个子代都应具有唯一的“键”道具。检查“搜索”的渲染方法

时间:2018-11-29 13:39:46

标签: javascript reactjs react-native view

搜索是完美的,一切都很好,但是会收到此警告。
按任何键启动搜索方法时都会收到此警告。
“ Song_ID”,“ Song_Name”和“ Image”是SQL数据库中的变量名。
-我看着其他问题,但这对我没有任何帮助。
这是错误所在的代码:

return (
        <View>
          <ScrollView>
            {musicList.map(songObj => {
              return (
                <View style={styles.resultsContainer}> /// Its written that the erorr in this line
                  <TouchableOpacity onPress={this.GetListViewItem.bind(this, songObj.Song_Name)}>
                  <Text style={{ fontSize: 16 }} key={songObj.Song_ID}>
                  {songObj.Song_Name}</Text>
                    <Image source={{ uri: songObj.Image }} style={styles.img} />
                  </TouchableOpacity>
                </View>
              );
            })}
          </ScrollView>
        </View>
      );
    }

我不知道将钥匙放在哪里和/或它是什么意思,我尝试了很多次,但操作不顺利。
如果需要更多详细信息,请告诉我,我会插入正确的代码。

1 个答案:

答案 0 :(得分:2)

您应该将密钥添加到map内最外面的组件上。您的情况是View。试试这个:

return (
        <View>
          <ScrollView>
            {musicList.map(songObj => {
              return (
                <View style={styles.resultsContainer} key={songObj.Song_ID}>
                  <TouchableOpacity onPress={this.GetListViewItem.bind(this, songObj.Song_Name)}>
                  <Text style={{ fontSize: 16 }}>
                  {songObj.Song_Name}</Text>
                    <Image source={{ uri: songObj.Image }} style={styles.img} />
                  </TouchableOpacity>
                </View>
              );
            })}
          </ScrollView>
        </View>
      );
    }

添加key道具可以使反应优化渲染,因此建议您添加它。阅读the docs了解更多信息。