Коммутатор React-router с TransitionGroup 2.2.0 не применяет правильный переход (стили)

У меня проблема, аналогичная той, о которой сообщалось здесь: https://github.com/ReactTraining/react-router/issues/5279

Я следую той же идее. Мне нужно смоделировать стиль навигации, как в мобильных устройствах (экраны / компоненты перемещаются справа налево при навигации вперед и перемещаются слева направо при движении назад). У меня нет проблем с навигацией справа налево. Но когда я меняю анимацию ("classNames" в CSSTransition) слева направо (после нажатия кнопки "Назад"), анимация не работает. Кажется, он применил его только к компоненту, который будет монтироваться... но монтированный компонент остается в том же стиле "справа налево", поэтому ожидаемая анимация не выглядит как мобильное приложение. Кто-нибудь знает почему?

Это суть кода:

render() {
const { location } = this.props;
return (
<div className="App">
            <TransitionGroup>
                <CSSTransition key={location.pathname.split('/')[1]} classNames={this.slideTo} timeout={1000} onEnter={this.handleEnter} onExit={this.handleExit} mountOnEnter={true} unmountOnExit={true} >
                    <Switch key={location.key} location={location}>
                        <Route location={location} path="/newVehicle" render={() => <NewVehicleView key={location.key}  next={this._next}/>} />
                        <Route location={location} path="/vehicleId" render={() => <VehicleIdView key={location.key} setVehicleId={this._setVehicleId} back={this._back} next={this._next} />} />
                        <Route location={location} render={() => <NewVehicleView key={location.key} next={this._next} />} />
                    </Switch>
                </CSSTransition>
            </TransitionGroup>
        </div>
    );
}

Стили:

.leftToRight-exit.leftToRight-exit-active {
  transform: translate(100%, 0, 0);
  transition: all 1000ms;
}
.leftToRight-exit {
  transform: translate3d(0, 0, 0);
}
.leftToRight-enter {
  transform: translate3d(-100%, 0, 0);
 }
.leftToRight-enter.leftToRight-enter-active {
  transform: translate3d(0, 0, 0);
  transition: all 1000ms;
}
.rightToLeft-enter {
  transform: translate3d(100%, 0, 0);
}
.rightToLeft-enter.rightToLeft-enter-active {
  transform: translate3d(0, 0, 0);
  transition: all 1000ms;
}
 .rightToLeft-exit {
  transform: translate3d(0, 0, 0);
}
.rightToLeft-exit.rightToLeft-exit-active {
  transform: translate3d(-100%, 0, 0);
  transition: all 1000ms;
}

Переменная {this.slideTo} устанавливается в значение 'rightToLeft' или 'leftToRight', когда в компонентах вызывается реквизит “next” или “back”. И тогда происходит навигация по кнопкам этого вида. Отладка приложения, я вижу, что "this.slideTo" имеет правильное значение, когда я нажимаю кнопку "Назад"… но когда я проверяю HTML-проверку, я могу понять, как только один из двух компонентов получает новый стиль, а другой - держит то же самое.

Любая помощь будет очень признателен. Благодарю.

0 ответов

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