STJ
@STJ
Front-end developer

Как добавлять класс к элементу в React?

Есть компонент сайдбара. Открывается добавлением класса .cbp-spmenu-open
render() {
let cx = React.addons.classSet;
    let classes = cx({
      "cbp-spmenu": true,
      "cbp-spmenu-vertical": true,
      "cbp-spmenu-left": true,
      "cbp-spmenu-open": this.props.isOpen
    })
    return (
      <nav className={ classes }>
        <h3>Menu</h3>
        <a href="#">Celery seakale</a>
        <a href="#">Dulse daikon</a>
        <a href="#">Zucchini garlic</a>
        <a href="#">Catsear azuki bean</a>
        <a href="#">Dandelion bunya</a>
        <a href="#">Rutabaga</a>
      </nav>
    );
}


При добавлении класса из компонента не срабатывает анимация, хотя если прямо в DOM редакторе браузера добавить класс, то всё нормально. Подскажите как быть?
  • Вопрос задан
  • 2342 просмотра
Решения вопроса 1
Laiff
@Laiff
Front-end developer
С учетом того, что состояние передается через свойства, то этот компонент точно перерендривается полностью, и возможно полностью и заменяется.
Это можно вылечить указав key атрибут для компонента навигационного меню. В таком случае будет обновление, а не перестройка.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@veitmen
Могу ошибаться, конечно, но видимо, насколько я понимаю, при изменении элемента в дереве ReactJs элементов, этот элемент заменяется на другой. Т.е. не просто класс у элемента меняется, а полностью элемент меняется, поэтому не работает анимация. Хотя я могу быть не прав. Может быть имеет смысл просто подписаться на некое событие и поменять класс с использованием jQuery. Но может быть есть подход более правильный.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы