2015-02-11 62 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