2015-02-26 8 views
9

Sono abbastanza nuovo per React e sto facendo fatica a convertire il mio modo di pensare da js standard.Come aggiungere o rimuovere una classeName sull'evento in ReactJS

Nel mio reagiscono componente ho il seguente elemento:

<div className='base-state' onClick={this.handleClick}>click here</div> 

Il comportamento che sto cercando di aggiungere una classe in più al clic. La mia prima idea era provare e aggiungere la classe nella funzione di gestione dei clic, ad es.

non sono stato in grado di trovare qualsiasi esempi che fanno qualcosa di simile, però, quindi sono abbastanza sicuro che non sto pensando a questo nel modo giusto.

Qualcuno può indicarmi la giusta direzione?

risposta

21

L'elenco di classi può essere derivato dallo stato del componente. Per esempio:

var Component = React.createClass({ 
    getInitialState: function() { 
    return { 
     clicked: false 
    }; 
    }, 

    handleClick: function() { 
    this.setState({clicked: true}); 
    }, 

    render: function() { 
    var className = this.state.clicked ? 'click-state' : 'base-state'; 
    return <div className={className} onClick={this.handleClick}>click here</div>; 
    } 
}); 

Calling this.setState attiveranno un nuovamente sottoposti a rendering del componente.

+2

È inoltre possibile usa l'helper addon 'classSet()': http: //facebook.git hub.io/react/docs/class-name-manipulation.html – David

+0

Ho una lista di elementi, quando li implemento nella mia soluzione, la classe cambia per tutti gli elementi nella lista. Voglio che cambi solo la voce dell'elenco, l'unico oggetto su cui ho fatto clic. Qualche soluzione a questo? –

+0

Per la persona di Temp O'rary: per un elenco di elementi, probabilmente non è stato associato il gestore di clic. Nell'elemento con qualcosa come "onClick = {() => this.handleClick}" o nel tuo costruttore: 'this.handleClick = this.handleClick.bind (this);' e nel tuo handleClick, rendere lo stato essere per l'elemento specifico ('this.setState ({someName})', per esempio), non solo generico 'cliccato: vero' – eon

Problemi correlati