Как добавить или удалить className по событию в ReactJS

9

Я совершенно новый для Реагировать, и я немного борюсь с преобразованием своего мышления из стандартных js.

В моем реагирующем компоненте у меня есть следующий элемент:

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

Поведение, которое я ищу, - это добавить дополнительный класс при нажатии. Моя первая идея заключалась в том, чтобы попытаться добавить класс в функцию обработчика кликов, например.

handleClick : function(e) {
   <add class "click-state" here>
}

Я не смог найти никаких примеров, которые бы делали что-либо подобное, поэтому я уверен, что я не думаю об этом правильно.

Может ли кто-нибудь указать мне в правильном направлении?

2 ответа

22

Список классов может быть получен из состояния компонента. Например:

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

Вызов this.setState приведет к перезагрузке компонента.

  • 2
    Вы также можете использовать classSet() : facebook.github.io/react/docs/class-name-manipulation.html
  • 0
    У меня есть список элементов, когда я реализую это в своем решении, класс меняется для всех элементов в списке. Я хочу, чтобы он изменил только один элемент из списка, один элемент, на котором я щелкнул. Любое решение этого?
Показать ещё 1 комментарий
0

Добавить атрибут ref в div:

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

Затем в методе handleClick получите элемент по ref и используйте свойство JavaScriptListList:

handleClick = () => {
  const element = this.refs.element;
  element.classList.add('click-state');
}

https://reactjs.org/docs/refs-and-the-dom.html

https://developer.mozilla.org/en-US/docs/Web/API/Element/classList

Ещё вопросы

Сообщество Overcoder
Наверх
Меню