当前位置: 首页 > 知识库问答 >
问题:

每个孩子都应该有一个独特的钥匙道具

彭修筠
2023-03-14

我正在为一个看起来像这样的纸牌游戏制作一个反应大厅:大厅图像

每个名称和“kick”按钮都是一个react组件,我根据名称列表(该列表中的所有名称都是唯一的)呈现该组件。我认为,由于名称是唯一的,我可以使用名称作为键,但由于某些原因,我得到以下错误:错误html" target="_blank">消息

我做错了什么?

注意:我还尝试了为KickButton键做key={Player"1"},以使其与相应的PlayerIcon唯一,但错误仍然存在

import React from 'react';
import firebase from "./firebase.js";

class PlayerIcon extends React.Component{

    render() {
        return(
            <div>
                <h1>{this.props.name}</h1>
            </div>
        )
    }
}

class KickButton extends React.Component {
    constructor(props){
        super();
        this.state = {
            style: props.style,
            player: props.kicked,
            Lobbycode: props.Lobbycode
        }
        this.handleKick = this.handleKick.bind(this)
    }

    handleKick() {
        var firestore = firebase.firestore();  
        var docRef = firestore.doc("Games/Game " + this.state.Lobbycode);
        const confirmed = window.confirm("Do you want to kick " + this.state.player + "?");
        if (confirmed) {
            docRef.get()
                .then((docSnapshot) => {
                    if (docSnapshot.data().PlayerAmnt === 1) {
                        firestore.doc("Games/Active Games").update({
                            "Active Games" : firebase.firestore.FieldValue.arrayRemove(this.state.Lobbycode)
                        })
                        firestore.doc("Games/Game " + this.state.Lobbycode).delete();
                    } else {
                        docRef.update({
                            players : firebase.firestore.FieldValue.arrayRemove(this.state.player),
                            PlayerAmnt : firebase.firestore.FieldValue.increment(-1)
                        }) 
                    }
                })
            return;
        }
    }

    render(props) {
        return <button onClick = {this.handleKick} style = {this.state.style}>Kick</button>
    }
}

class HostLobbylist extends React.Component {

    render() {
        var playerstorender = [<div style={{display: "flex"}}><PlayerIcon key={this.props.players[0]} name={this.props.players[0]}/></div>].concat(
            this.props.players.slice(1).map(player => 
                <div style={{display: "flex"}}>
                <PlayerIcon key={player} name={player}/><KickButton key={player} kicked={player} style={{fontSize: "20px", height: "30px", verticalAlign: "middle", margin:"25px"}} Lobbycode={this.props.Lobbycode}/>
            </div>))

    return(
        <div>
            {playerstorender} 
        </div>   
    ) 
}
}

export default HostLobbylist

编辑1:下面是我的新渲染函数,其中键在父div中,但错误仍然存在。我还是误会吗?

class HostLobbylist extends React.Component {

 render() {
     var playerstorender = [<div key={this.props.players[0]} style={{display: "flex"}}><PlayerIcon name={this.props.players[0]}/></div>].concat(
         this.props.players.slice(1).map(player => 
             <div key={player} style={{display: "flex"}}>
             <PlayerIcon name={player}/><KickButton kicked={player} style={{fontSize: "20px", height: "30px", verticalAlign: "middle", margin:"25px"}} Lobbycode={this.props.Lobbycode}/>
         </div>))

 return(
     <div>
         {playerstorender} 
     </div>   
 ) 
}
}

编辑2:我发现了错误!!!!!这道具。玩家有时有0个项目,所以我想玩家中第一个要渲染的项目的键是未定义的。谢谢你的帮助!

共有1个答案

卫梓
2023-03-14

您可以添加一个在每个循环中递增的索引,并使用该索引作为键来区分元素与循环

this.props.players.slice(1).map((player, index) => 
                <div key={index} style={{display: "flex"}}>
 类似资料:
  • 我使用firebase作为数据库,使用Ionic React作为移动应用程序。我已经将firebase数据转换为数组,但当我想映射值时。它告诉我它应该有一个唯一的键,但我已经在元素的返回函数中放置了一个唯一的键。有人能告诉我我做错了什么吗?谢谢 下面是我将对象转换为数组的代码 作为回报 我得到的是

  • 我正在使用GoogleBooksAPI构建一个应用程序,我似乎正在向列表中的每个孩子传递一个唯一的密钥,但错误不会消失。我一定是做错了什么,但我不知道是什么。 注意,在const books中返回后,我有一个控制台。日志(book.id),它将在控制台中显示所有10个唯一的id键。但是当我试图使用key={book.id}将它传递给这个组件的子组件时,我得到了这个错误。

  • 为什么它向我显示这个错误? 我有一个应用程序是在我的react native Studio中使用npx react native init myProyect创建的。 我正在测试使用“styled components/native”添加样式的方法。 我想展示不同的公司,他们的名字,地址,公司类型的图标,公司的形象和评级明星。 我为星星添加了一个svg图像。对于公司映像,出于测试目的,我已经通过网

  • 我收到此错误消息,尽管我的列表元素确实有一个键:( 反应js:18745警告:数组或迭代器中的每个子级都应该有一个唯一的“key”属性。检查

  • 在这个简单的React应用程序中,我不明白为什么我会收到以下警告信息: 警告:列表中的每个孩子都应该有一个唯一的“键”道具。 对我来说,似乎我把密钥放在了正确的位置,形式为key={item.login.uuid} 我怎样才能摆脱警告信息?把钥匙放在哪里合适? 应用程序。js 列表js

  • 我知道这个问题有很多答案,但我找不到一个能完全解决我问题的答案。我得到以下错误: