2016-11-29 5 views
0

Wenn Bedingung in reactjs nicht funktioniert. möchte ein Karussell erstellen, so dass sein erstes Bild die Klasse "aktiv" enthält, wo andere nicht.wenn Bedingung in reactjs

Zustand ist der Index Null ist oder nicht

wie anzuwenden, wenn in Zustand

class CaseImages extends React.Component { 
 
    constructor() { 
 
    super(); 
 
    } 
 

 
    _getImages() { 
 
    return this.props.images.map((image, index) => 
 
           if ({index}==0}<div className="item active" key={index}><img src={image.url} class="case-image"/ ></div>} 
 
           else{ 
 
           <div className="item" key={index}><img src={image.url} class="case-image"/ ></div> 
 
           } 
 
           ); 
 
} 
 
\t render(){ 
 
\t \t return(
 
\t \t <div className="row"> 
 
\t \t \t <div className="col-xs-12 col-sm-12"> 
 
\t \t \t \t <div className="case-feature-image"> 
 
\t \t \t \t \t <div id="myCarousel" className="carousel slide" data-ride="carousel"> 
 
         <div className="carousel-inner" role="listbox"> 
 
           {this._getImages()} 
 
         </div > 
 
     <a className ="left carousel-control" href ="#myCarousel" role ="data-slide = "prev"> 
 
     <span className = "glyphicon glyphicon-chevron-left" 
 
     aria - hidden = "true"> </span> 
 
          <span className="sr-only">Previous</span> 
 
     </a> 
 
         <a className="right carousel-control" href="#myCarousel" role="button" data-slide="next"> 
 
          <span className="glyphicon glyphicon-chevron-right" aria-hidden="true"></span> 
 
     <span className ="sr-only"> Next </span> 
 
         </a> 
 
     </div> 
 
\t \t \t \t </div> 
 
     </div> 
 
\t \t </div> 
 
    ) 
 
    }; 
 
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>

+0

Können Sie Ihren Code bitte richtig formatieren bitte? – Timo

+1

Der {Index} sollte überhaupt nicht funktionieren. Sie benötigen nur die geschweiften Klammern innerhalb des JSX-Codes (der Pseudo-HTML-Teil). –

+0

'if ({index} == 0}' ist ungültig. Meinten Sie 'if (index == 0)'? Bitte formatieren Sie Ihren Code. – Nick

Antwort

1

Versuchen Sie etwas Ähnliches wie die folgenden reagieren:

<div className={index === 0 ? 'item active' : 'item'}>...</div> 

Sie könnten auch Verwenden Sie eine Funktion, um die korrekten Klassen zu berechnen:

// this function needs to live *outside* of JSX 
function getClasses(index) { 
    return 'item' + index === 0 ? ' active' : ''; 
} 

// this is in the JSX 
<div className={getClasses(index)}>...</div> 
0

können Sie entweder einen bedingten Operator wie folgt:

{index===0? 
    <div className="item active" key={index}><img src={image.url} class="case-image"/ ></div> 
: 
    <div className="item" key={index}><img src={image.url} class="case-image"/ ></div> 
} 

oder eine Funktion wie folgt aus:

{(()=> {  
     if(index===0){ 
      return(<div className="item active" key={index}><img src={image.url} class="case-image"/ ></div>);} 
     else{ 
      return(<div className="item" key={index}><img src={image.url} class="case-image"/ ></div>);}    
     })()} 
+0

Es wird funktionieren, aber es gibt * weit * zu viel Doppelarbeit. –

+0

true, ich wollte nur zeigen, wie man einen if-Block im Render verwendet. :) Die beste Option in diesem Szenario ist die Verwendung eines ternären Operators und das Hinzufügen der Klasse. –

+0

entfernt "Kühler". Ich war einfach sehr glücklich, als ich das erste Mal gelernt habe, dass wir if-else Blöcke im Render verwenden können. Macht den Code lesbarer. Und Sie können immer eine leere Liste innerhalb des Blocks initialisieren und mehr als ein div im Falle von if oder sonst einfügen und die Liste zurückgeben. Ich habe das in vielen Fällen als sehr nützlich empfunden. –

0

ich eine weitere Alternative in den Hut werfen werde, mit classnames:

const divClass = classNames('item', { active: index === 0 }) 
... 
<div className={divClass} key={index}> 
    <img src={image.url} className="case-image" /> 
</div> 

Ich bevorzuge das Einrechnen von Berechnungen ons außerhalb von Tags und Deduplizierung so viel wie möglich.

+0

Müsste dies in eine separate Komponente getrennt werden, in der Sie 'index' als Eigenschaft übergeben? –

+0

@ adam-beck Nein, aber es könnte sein. –