2015-02-11 24 views
0

在下面的代码中,我收到有关GridRow上丢失键的警告。我已经阅读了它,但我没有找到一种方法将其应用于反应组件?看来我必须在最终的渲染方法中做到这一点,但我没有任何数据呢?如何在此反应代码中正确添加键

var data1 = {"Columns":[{"Title":"Title1","HTMLClass":"g1_Title"},{"Title":"Title2","HTMLClass":"g2_Title"},{"Title":"Title3","HTMLClass":"g3_Title"}],"Rows":[{"Cells":["Cell0","Cell1","Cell2"]},{"Cells":["Cell0","Cell1","Cell2"]},{"Cells":["Cell0","Cell1","Cell2"]},{"Cells":["Cell0","Cell1","Cell2"]},{"Cells":["Cell0","Cell1","Cell2"]},{"Cells":["Cell0","Cell1","Cell2"]},{"Cells":["Cell0","Cell1","Cell2"]},{"Cells":["Cell0","Cell1","Cell2"]},{"Cells":["Cell0","Cell1","Cell2"]},{"Cells":["Cell0","Cell1","Cell2"]},{"Cells":["Cell0","Cell1","Cell2"]},{"Cells":["Cell0","Cell1","Cell2"]},{"Cells":["Cell0","Cell1","Cell2"]},{"Cells":["Cell0","Cell1","Cell2"]},{"Cells":["Cell0","Cell1","Cell2"]},{"Cells":["Cell0","Cell1","Cell2"]},{"Cells":["Cell0","Cell1","Cell2"]},{"Cells":["Cell0","Cell1","Cell2"]},{"Cells":["Cell0","Cell1","Cell2"]},{"Cells":["Cell0","Cell1","Cell2"]}]}; 


var GridRow = React.createClass({ 
    render: function() { 
     var data = [], columns; 

     if(this.props.columns){ 
      for(var i = 0; i < this.props.columns.length; i++){ 
       data.push({ 
        HTMLclass: this.props.columns[i].HTMLClass, 
        content: this.props.cells[i] 
       }) 
      } 
     } 


     columns = data.map(function(col) { 
      return (
       <div className={col.HTMLclass}>{col.content}</div> 
      ); 
     }.bind(this)); 

     return (
      <li> 
       {columns} 
      </li> 
     ); 
    } 
}); 
var GridHead = React.createClass({ 
    render: function() { 
     if(this.props.data){ 
      var cell = this.props.data.Title; 
      var htmlClass = this.props.data.HTMLClass; 
     } 
     return (
      <div className={htmlClass}>{cell}</div> 
     ); 
    } 
}); 
var GridList = React.createClass({ 
    render: function() { 
     if(this.props.data){ 
      var header = this.props.data.Columns.map(function (columns, i) { 
       return (
        <GridHead data={columns} key={i} /> 
       ); 
      }); 
      var row = this.props.data.Rows.map(function (row, i) { 
       return (
        <GridRow columns={data1.Columns} cells={row.Cells} key={i} /> 
       ); 
      }); 
     } 
     return (
      <ul> 
       <li>{header}</li> 
       {row} 
      </ul> 
     ); 
    } 
}); 


var GridBox = React.createClass({ 
    loadCommentsFromServer: function() { 
     var xhr = new XMLHttpRequest(); 
     xhr.open('get', this.props.url, true); 
     xhr.onload = function() { 
      var data = JSON.parse(xhr.responseText); 
      this.setState({ data: data }); 
     }.bind(this); 
     xhr.send(); 
    }, 
    getInitialState: function() { 
     return { data: this.props.initial }; 
    }, 
    render: function(){ 
     return (
      <GridList data={data1} /> 
     ); 
    } 
}); 

警告:在阵列中的每个孩子都应该有一个唯一的“钥匙”的道具。 检查GridRow的渲染方法。有关更多信息,请参阅 fb.me/react-warning-keys

回答

1

只需将该键添加到您的列div,React只需要一些唯一标识符,以便它可以保持虚拟DOM差异最新。

关键可以是任何东西,只要它是唯一的。

columns = data.map(function(col, i) { 
    return (
     <div className={col.HTMLclass}>{col.content} key={i}></div> 
    ); 
}.bind(this)); 
+0

好吧,我以为我想把它添加到李元素。所以我真的要做的就是给钥匙链添加最远的链子? – Banshee 2015-02-11 22:19:04