尝试找出有关唯一键的警告来自何处

时间:2019-07-23 17:18:11

标签: reactjs react-grid-layout

我不断收到警告:“警告:列表中的每个孩子在ShowcaseLayout中都应该有一个唯一的“键”道具

我尝试遍历代码的每个区域,在这些区域中我使用map函数并提供唯一的键(某些键是uuid),但我似乎无法使错误消息消失< / p>

generateDOM() {

    return _.map(this.state.layouts[this.state.currentBreakpoint], l => {

      if (this.state.feedList[l.i] !== undefined && this.state.feedList.length > 0){
      return (

        <div key={l.i} className={l.static ? "static" : ""}>

            <div className="jsmpeg" data-url={this.state.feedList[l.i].streamURL} uuid={this.state.feedList[l.i].uuid} >
        </div>    
        );
       } 
    });
  }
    ReactDOM.createPortal( (
      <Form.Group controlId="enableVal" >
          <Form.Control name="enablecamera" className="enableOptionsBox"  as="select" multiple>
        { this.state.options.map((item) => <option key={item.key} name={item.name} value={item.value} uuid={item.uuid}>{item.name}</option>) }



        </Form.Control>
    <Button variant="Success" className="btn btn-success" onClick={ () => {
          sendEnable();
    }} >
      Enable
    </Button>

    </Form.Group>
    ), document.getElementById('enableForm')) ];
  }

3 个答案:

答案 0 :(得分:0)

您仍然有可能将重复的ID / UUID映射到迭代的元素。

为确保它是唯一值,您可以返回地图的索引,并将其提供给元素,如下所示:

generateDOM() {
  return _.map(this.state.layouts[this.state.currentBreakpoint], (l, index) => {
    if (this.state.feedList[l.i] !== undefined && this.state.feedList.length > 0){
      return (
        <div key={index} className={l.static ? "static" : ""}>
            <div className="jsmpeg" data-url={this.state.feedList[l.i].streamURL} uuid={this.state.feedList[l.i].uuid} >
        </div>    
      );
     } 
  });
}

答案 1 :(得分:0)

添加idx作为密钥的一部分,而不是分配item.key .map((item)=>

以下希望对您有所帮助, .map((item,idx)=>

快乐编码!

答案 2 :(得分:0)

您应该记录所有列表项并检查是否有重复的键。您不应该将索引用作键,因为如果重新排序列表,可能会导致错误。这段代码没有什么问题,但可能是feedList id。