2016-03-29 13 views
0

ich mit einem reactJS App arbeiten und haben den folgenden Code:Bootstrap Reihen in ReactJS

renderProductBlock(product, index) { 
    return (
     <div className="product col-xs-4"> 
      <span className="product-name">{product.name}</span> 
      <span className="product-price">{product.price}</span> 
      <a href="#" className="btn btn-primary">Buy Now</a> 
     </div> 
    ); 
} 

renderProductList() { 
    let blocks = []; 

    _.forEach(product, (item, index) => { 
     const productBlock = this.renderProductBlock(item, index); 

     if(productBlock) { 
      blocks.push(productBlock); 
     } 
    }); 

    return blocks; 
} 

render() { 
    const productsBlock = this.renderProductList(); 

    if(productsBlock) { 
     return (
      <div className="products"> 
       <div className="row"> 
        {productsBlock} 
       </div> 
      </div> 
     ) 
    } 
} 

Welche HTML in diesem Layout ausgibt:

<div class="products"> 
    <div class="row"> 
     <div class="product col-xs-4"> 
      Content 
     </div> 
     <div class="product col-xs-4"> 
      Content 
     </div> 
     <div class="product col-xs-4"> 
      Content 
     </div> 
     <div class="product col-xs-4"> 
      Content 
     </div> 
     <div class="product col-xs-4"> 
      Content 
     </div> 
    </div> 
</div> 

Was wäre der beste Weg für mich sein Bootstrap-Zeilen in diesen Schleifen hinzufügen alle 3 Produkte in einer Reihe div wickeln etwa so:

<div class="products"> 
    <div class="row"> 
     <div class="product col-xs-4"> 
      Content 
     </div> 
     <div class="product col-xs-4"> 
      Content 
     </div> 
     <div class="product col-xs-4"> 
      Content 
     </div> 
    </div> 
    <div class="row"> 
     <div class="product col-xs-4"> 
      Content 
     </div> 
     <div class="product col-xs-4"> 
      Content 
     </div> 
    </div> 
</div> 

Sorry für die etwas einfa le Frage, aber ich kann das nicht richtig verstehen.

+0

Haben Sie versucht, Blöcke 'Rückkehr Blöcke Rückkehr;' in a ''? – Bala

+0

Ich habe die Frage mit einem einzelnen Zeilenblock aktualisiert, der tatsächlich ist, wie es derzeit ist, aber es funktioniert nicht gut ansprechend (wir verwenden auch tatsächlich col-sm-X, col-md-X usw.) und wickeln in nur einer einzigen Zeile Das bedeutet, dass einige Blöcke nach rechts schweben, wo wir Zeilen haben, die sich nicht vollständig zu 12 Spalten addieren (dh nur 2 Produkte in einer Reihe). Aus diesem Grund wollen wir idealerweise eine Reihe alle 3 Spalten :) –

Antwort

2

halten würde nur den Überblick über die, wie viele Blöcke wurden innerhalb der Schleife verarbeitet und einmal drei Blöcke wiedergegeben werden, gruppieren sie in einer Reihe:

renderRow() { 
    return (
     <div class="row"> 
      {block} 
     </div> 
    ); 
} 

renderProductList() { 
    let blocks = [], rows = []; 
    _.forEach(product, (item, index) => { 
     const productBlock = this.renderProductBlock(item, index); 
     if (productBlock) { 
      blocks.push(productBlock); 
     } 
     if (block.length >= 3) { 
      const row = this.renderRow(blocks); 
      if (row) { 
       rows.push(row); 
      } 
      blocks = []; 
     } 
    });  
    const row = this.renderRow(blocks); 
    if (row) { 
     rows.push(row); 
    } 
    return rows; 
} 
+0

Schön, ich habe versucht, Modulus 'index% 4' etc. zu verwenden, aber es kam nicht zusammen. Das ist viel besser, danke! –

+0

wünschte, es gäbe einen einfacheren Weg, dies zu tun, aber trotzdem half mir das ein wenig Zeit, Bootstrap-Zeilen und -Spalten zu berechnen, danke! – Truchainz