代码之家  ›  专栏  ›  技术社区  ›  Nikola Lukic

两个在React中具有相同键的子级[重复]

  •  0
  • Nikola Lukic  · 技术社区  · 6 年前

    警告:遇到两个具有相同密钥的子级, [object Object] 跨更新的标识。非唯一键可能导致子项 重复和/或忽略该行为不受支持并且可能 在div中(由ContentBody创建) 在ContentBody中

     return (
                <div ref={this.myRef} style={this.state.myHomeStyle} >
                  {this.state.elements.map((i: any) => {
                    console.log(">>i>>>>", i);
                    return <span style={i.myStyle} key={i} >{i}</span>;
                  })}
                </div>
            );
    
    // Where i init 
     public componentDidMount() {
    
        console.log('componentDidMount');
        this.myDOM  = this.myRef.current;
        this.myDOM.addEventListener(myEventsList.adaptCss, this.adaptCss);
    
        this.add(12,this.INLINE_TEST_ELE, null);
        this.add(13,this.INLINE_TEST_ELE, null);
    
      }
    
    
    // Function add 
    private add = (id: number, content: any, event: any ) => {
    
        let localArr: any[] = [];
        let mEvent: any = null;
    
        if (event !== undefined) {
          mEvent = event;
        }
    
        localArr = this.state.elements;
        localArr.push(React.createElement("div", { key: id , onClick : mEvent }, content));
    
        this.setState(
          {
            elements: localArr,
            visibility : true,
          },
        );
    
      }
    

    更新: 以下是我的初学者项目的链接: https://github.com/zlatnaspirala/react-vs-typescript-starter

    3 回复  |  直到 4 年前
        1
  •  21
  •   heyitsmarcucu    6 年前

    可以在map函数中传递另一个参数,如下所示:

    this.state.elements.map((element, index) => {
       return <span style={element.myStyle} key={index} >{element}</span>;
    });
    

    的第二个参数 Array.prototype.map 函数实际上包含该数组中特定元素的当前索引。

    这样,您就可以确保您的密钥没有重复。

        2
  •  2
  •   user10298214 user10298214    6 年前

    有关“关键”相关警告和最佳实践的更多了解,请参见此

     function ListItem(props) {
      // Correct! There is no need to specify the key here:
      return <li>{props.value}</li>;
    }
    
    function NumberList(props) {
      const numbers = props.numbers;
      const listItems = numbers.map((number) =>
        // Correct! Key should be specified inside the array.
        <ListItem key={number.toString()}
                  value={number} />
    
      );
      return (
        <ul>
          {listItems}
        </ul>
      );
    }
    
    const numbers = [1, 2, 3, 4, 5];
    ReactDOM.render(
      <NumberList numbers={numbers} />,
      document.getElementById('root')
    );
    

    访问此链接 https://reactjs.org/docs/lists-and-keys.html#extracting-components-with-keys 了解更多信息

        3
  •  1
  •   Bhojendra Rauniyar    6 年前

    .map((element, index)=>
    

    现在,使用 index 会给你不同的钥匙。