Как при клике применить класс в React?

185
21 августа 2021, 07:20

Подскажите как при клике на класс ("img"), выводить определеный класс info__skills?

class Skills extends React.Component {
 constructor(props) {
  super(props);
  this.state = { styles: [] };
}
render() {
 return (
  <section className="skills">
    <div className='logo__skills'>
      <div>
        <img src={require("./../img/1200px-HTML5_logo_and_wordmark.png")} alt=""/>
      </div>
      <div>
        <img src={require("./../img/css3-logo.png")} alt="" />
      </div>
      <div>
        <img src={require("./../img/js-logo.png")} alt="" />
      </div>  
    </div >
    <div>
      <div className="info__skills">
        <p>Текст</p>
      </div>
      <div className="info__skills">
      <p>Текст 2 </p>
      </div>
      <div className="info__skills">
      <p>Текст 3 </p>
      </div>
    </div>
  </section >
)}}
Answer 1

Грубый пример того, что Вы хотите. Навешиваем аттрибут на тэг (в моем примере это div, а по факту может быть любой другой, img, p, и прочие), по которому будем кликать, а также обработчик handleClick. В стейте сохраняем атррибут элемента, по которому кликнули, в своем примере я использовал id. Затем в рендеринге в тернарке проверяем, по какому был клик и выводим тот, который нужно:

class Example extends React.Component { 
  constructor(props) { 
    super(props); 
     
    this.state = { 
      clicked: '', 
    }; 
 
    this.handleClick = this.handleClick.bind(this); 
  } 
 
  handleClick(e) { 
    const { id } = e.currentTarget; 
    this.setState({ clicked: id }); 
  } 
 
  render() { 
    const { clicked } = this.state; 
     
    return ( 
    <div> 
      <div id='one' onClick={this.handleClick}> 
        <p> Image 1 </p> 
      </div> 
      <div id='two' onClick={this.handleClick}> 
        <p> Image 2 </p> 
      </div> 
      <div id='three' onClick={this.handleClick}> 
        <p> Image 3 </p> 
      </div> 
 
      <div> 
        <div className={clicked === "one" ? "info__skills_one" : "no_display"}> 
          <p>Текст 1</p> 
        </div> 
        <div className={clicked === "two" ? "info__skills_two" : "no_display"}> 
          <p>Текст 2 </p> 
        </div> 
        <div className={clicked === "three" ? "info__skills_three" : "no_display"}> 
          <p>Текст 3 </p> 
        </div> 
      </div> 
    </div> 
  )} 
} 
 
ReactDOM.render( 
  <Example />, 
  document.getElementById('container') 
);
.info__skills_one { 
  color: red; 
} 
 
.info__skills_two { 
  color: green; 
} 
 
.info__skills_three { 
  color: orange; 
} 
 
.no_display { 
  display: none; 
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script> 
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script> 
<div id="container"> 
  <!-- This element's contents will be replaced with your component. --> 
</div>

Для того, чтобы не юзать тернарки - используйте очень удобную утилиту classnames. Она позволяет использовать классы условно, например вот так:

classNames({ 'foo-bar': true }); // => 'foo-bar'
classNames({ 'foo-bar': false }); // => ''
READ ALSO
подсказка в ячейке таблицы

подсказка в ячейке таблицы

Подскажите как сделать, чтобы при наведении курсора мыши на ячейку таблицы, возникала подсказка, я нашел код в интернете

193
Не работает таймер если закрыть страницы или перейти на другую

Не работает таймер если закрыть страницы или перейти на другую

Всем приветРебят, помогите решить проблемку

302