Переходы CSS игнорируются, потому что реагирует на повторную визуализацию

Я пытаюсь использовать переходы css, но, поскольку реакция повторно отображает компонент, они игнорируются. Давайте представим пример использования, в котором моя функция render() выводит что-то вроде этого:

<ul>
  <li className = {this.state.path== = "/menu1/" ? "active" : "inactive"}>
    menu 1
  </li>
  <li className = {this.state.path== = "/menu2/" ? "active" : "inactive"}>
    menu 2
  </li>
  <li className = {this.state.path== = "/menu3/" ? "active" : "inactive"}>
    menu 3
  </li>
</ul>

Представим, что:

  • .active помещает синий фон и анимирует цвет фона
  • .inactive помещает красный фон и анимирует цвет фона

Приложение загружается с активным / menu1. Используя реагирующий маршрутизатор, я обновляю состояние, и компонент должен обновиться. При переходе к новому маршруту (например, «/ menu2 /») все работает, но при повторном рендеринге мой переход игнорируется.

Единственное решение, которое я увидел, - это изменить DOM с помощью componentDidUpdate, но я не хочу реагировать на непосредственное управление DOM, поэтому мой вопрос:

Как правильно анимировать элементы, используя React вместе с CSS?

Одна вещь, которая сработала для меня, - это использование модификаторов. Так что имейте класс с всегда применяемым переходом и примените класс-модификатор, если он активен.

paulmorar 15.05.2018 17:06
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
1
1
1 717
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Правильный способ - использовать модификаторы css для применения разных стилей.

Это означает, что ваш код должен выглядеть примерно так:

<ul>
  <li className = {`nav-item ${this.state.path== = "/menu1/" ? "nav-item--active" : ""}`}>
    menu 1
  </li>
  <li className = {`nav-item ${this.state.path== = "/menu2/" ? "nav-item--active" : ""}`}>
    menu 2
  </li>
  <li className = {`nav-item ${this.state.path== = "/menu3/" ? "nav-item--active" : ""}`}>
    menu 3
  </li>
</ul>

Допустим, вам нужен фоновый переход. Вы должны применить стили перехода и исходный цвет фона к классу .nav-item. И после этого вы добавите правило для .nav-item--active, которое просто меняет цвет фона. Думаю, сделав это, вы получите ожидаемый результат.

как я раньше не слышал о модификаторах css, не знаю. В любом случае спасибо ^^ '

beauchette 16.05.2018 12:06

Я не понимаю этого ответа, вы делаете то же самое, что и OP, и полностью игнорируете повторный рендеринг компонента, который является корнем его проблемы. Как именно использование стиля БЭМ должно помочь с проблемой повторного рендеринга компонентов, с которой он столкнулся?

T to the J 25.04.2019 01:22

Я тоже здесь запутался. эта штука с "модификаторами" просто выдумана, верно? то есть спецификация браузера или CSS ничего об этом не знает, это просто соглашение об именах (БЭМ). Это поведение отличается от исходного сообщения? И почему?

Kyle Gobel 19.06.2019 18:13

Итак, чтобы было ясно ... модификаторы не являются обязательными для того, чтобы эта работа работала. Это просто хорошая вещь, которую нужно знать и структурировать код. Ключевым моментом здесь было не переключение между двумя классами, а постоянное применение одного, а другого - условного. И да, модификаторы - это просто соглашение, а не то, что браузер интерпретирует по-разному.

paulmorar 20.06.2019 22:53

Также для @TtotheJ ... мой пример немного отличается. И корень проблемы действительно в повторном рендеринге и в том, как на него реагирует DOM.

paulmorar 20.06.2019 22:56

Другие вопросы по теме