Je suis assez nouveau pour React et j'ai du mal à convertir ma pensée à partir de js standard.
Dans mon composant React, j'ai l'élément suivant:
<div className='base-state' onClick={this.handleClick}>click here</div>
Le comportement que je recherche consiste à ajouter une classe supplémentaire au clic. Ma première idée a été d'essayer d'ajouter la classe dans la fonction de gestionnaire de clic, par ex.
handleClick : function(e) {
<add class "click-state" here>
}
Je n'ai pas pu trouver d'exemples qui font quelque chose de similaire, donc je suis assez sûr de ne pas y penser de la bonne manière.
Est-ce que quelqu'un peut-il me montrer la bonne direction?
La liste des classes peut être dérivée de l'état du composant. Par exemple:
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>;
}
});
Appeler this.setState
déclenchera un nouveau rendu du composant.
Ajouter l'attribut ref à div:
en classe:
myRef = React.createRef();
en rendu:
<div ref={this.myRef} className="base-state" onClick={this.handleClick}>click here</div>
Ensuite, dans la méthode handleClick, obtenez l'élément par référence et utilisez la propriété JavaScript classList:
handleClick = () => this.myRef.classList.add('click-state')
https://reactjs.org/docs/refs-and-the-dom.html
Vous pouvez utiliser juste un Vanilla JS: event.target et classList
handleClick = event => event.target.classList.add('click-state');
render() {
return <div className="base-state" onClick={this.handleClick}>click here</div>;
}
https://developer.mozilla.org/en-US/docs/Web/API/Event/target
https://developer.mozilla.org/en-US/docs/Web/API/Element/classList