2015-02-26 14 views
9

Jestem całkiem nowy, aby React i mam problem z konwersją mojego myślenia ze standardowego js.Jak dodać lub usunąć parametr className na zdarzenie w ReactJS

W moim reagować składnik Mam następujący element:

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

Zachowanie szukam jest dodanie dodatkowej klasy na kliknięcia. Mój pierwszy pomysł polegał na próbie dodania klasy do funkcji obsługi kliknięcia, np.

nie byłem w stanie znaleźć żadnych przykładów, które robią coś podobnego, choć, więc jestem pewny, nie myślę o tym w odpowiedni sposób.

Czy ktoś może wskazać mi właściwy kierunek?

Odpowiedz

21

Listę klas można wyprowadzić ze stanu komponentu. Na przykład:

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>; 
    } 
}); 

Wywołanie this.setState wywoła rerender składnika.

+2

Można również użyj pomocnika 'classSet()' addon: http: //facebook.git hub.io/react/docs/class-name-manipulation.html – David

+0

Mam listę elementów, gdy zaimplementuję to w moim rozwiązaniu, klasa zmieni się dla wszystkich elementów na liście. Chcę, aby zmieniła tylko jeden przedmiot z listy, ten, w którym kliknąłem. Jakieś rozwiązanie tego? –

+0

Dla osoby tymczasowej: Dla listy elementów najprawdopodobniej nie związałeś obsługi kliknięcia. Albo w elemencie z czymś takim jak 'onClick = {() => this.handleClick}' lub w twoim konstruktorze: 'this.handleClick = this.handleClick.bind (this);' w twoim handleClick, spraw, aby stan był dla konkretny element (na przykład 'this.setState ({someName})', a nie tylko ogólny "clicked: true" – eon

Powiązane problemy