2017-09-05 2 views
1

Ich habe eine einfache React-Anwendung, die in einem Behälter innerhalb Reagieren erstellt angezeigt ein Array von Daten enthält:Wiederholen von ReactDOM.render basierend auf Feldlänge

var products = [ 
{ name: 'product 1'}, 
{ name: 'product 2' }, 
{ name: 'product 3' }, 
{ name: 'product 4' } 
]; 

var Status = React.createClass({ 

render: function() { 

    var listItems = this.props.items.map(function (item) { 
     return (
      <h2 key={item.name}> 
       {item.name} 
      </h2> 
     ); 
    }); 
    return (   
     <div className="ContainerName"> 
     {listItems}            
     </div>  
    ); 
} 
}); 

ReactDOM.render(<Status items={products} />, 
document.getElementById('statusContainer')); 

Das Problem, das ich habe ist, dass ich den „Containernamen“ will div (oder Status var) zum Rendern entsprechend der Anzahl der Elemente im Array (4 Mal, aber derzeit wird nur einmal gerendert).

Ich habe versucht, aber es funktioniert nicht:

ReactDOM.render(<Status items={products} />, 
document.getElementById('statusContainer'), products.length); 

Ist ReactDom nur einmal werden soll verwendet? Oder gibt es da einen Weg, wie ich die Komponente entsprechend der Array-Länge wiederverwenden kann? Oder bin ich völlig falsch verstanden?

+0

was möchten Sie erreichen? Warum möchten Sie ReactDOM.render 4 mal einen bestimmten Grund verwenden? –

+0

@MayankShukla Ich möchte nur die Div nach der Anzahl der Elemente im Array zu rendern, muss es nicht speziell 4 mal sein - wenn das Array 10 Elemente hätte ich möchte, dass die Div 10 Mal zu rendern. – Whirlwind991

+0

Die Renderfunktion muss ein einzelnes Wurzelelement mit einer beliebigen Anzahl von untergeordneten Elementen zurückgeben. Daher könnten Sie Ihre 'h2' in einen' div.ContainerName' verpacken und die eine in der Rückkehr in etwas wie 'div.statusContainerRoot' umbenennen. – Derek

Antwort

1

Die Renderfunktion muss ein einzelnes Wurzelelement mit einer beliebigen Anzahl von untergeordneten Elementen zurückgeben. Das würde funktionieren:

var products = [ 
    { name: 'product 1'}, 
    { name: 'product 2' }, 
    { name: 'product 3' }, 
    { name: 'product 4' } 
]; 

var Status = React.createClass({ 
    render: function() { 
    var listItems = this.props.items.map(item => { 
     return (
     <div className="ContainerName" key={item.name}> 
      <h2>{item.name}</h2> 
     </div> 
     ); 
    }); 

    return <div className="statusComponentRoot">{listItems}</div>; 
    } 
}); 

ReactDOM.render(
    <Status items={products} />, 
    document.getElementById('statusContainer') 
); 
+0

Ahhh, das macht Sinn. Ja, ich dachte, es wäre einfach, den Render einfach mal zu duplizieren, aber ich denke nicht! Cheers für die Hilfe, das ist großartig – Whirlwind991

Verwandte Themen