Я пытаюсь ознакомиться с react-transition-group
, но у меня возникают некоторые проблемы.В простом компоненте, который отображает текущий счетчик и анимирует отображаемое значение на increment
или decrement
при вводе нового значения, он смещает предыдущее, что создает неожиданный эффект.Вероятно, это происходит потому, что новый элемент с непрозрачностью 0
входит в купол, и оба значения отображаются одновременно.
Весь компонент выглядит следующим образом:
import React, { Component } from "react";
import { TransitionGroup, CSSTransition } from "react-transition-group";
import "./App.css";
class App extends Component {
state = {
progress: 0
};
incr = () => {
this.setState({
progress: this.state.progress + 1
});
};
decr = () => {
this.setState({
progress: this.state.progress - 1
});
};
render() {
return (
<div className="App">
<TransitionGroup>
<CSSTransition
in={true}
appear={true}
key={this.state.progress}
timeout={2000}
classNames="slide"
>
<div key={this.state.progress}>{this.state.progress}</div>
</CSSTransition>
</TransitionGroup>
<button onClick={this.decr}>decr</button>
<button onClick={this.incr}>incr</button>
</div>
);
}
}
export default App;
Классы перехода выглядятнапример:
/* slide enter */
.slide-enter {
opacity: 0;
transform: scale(0.97) translateX(5px);
z-index: 1;
}
.slide-enter.slide-enter-active {
opacity: 1;
transform: scale(1) translateX(0);
transition: opacity 3000ms linear 1000ms, transform 3000ms ease-in-out 1000ms;
}
/* slide exit */
.slide-exit {
opacity: 1;
transform: scale(1) translateX(0);
}
.slide-exit.slide-exit-active {
opacity: 0;
transform: scale(0.97) translateX(5px);
transition: opacity 1500ms linear, transform 1500ms ease-out;
}
.slide-exit-done {
opacity: 0;
}
Я хочу добиться следующего поведения: при увеличении / уменьшении отображаемый счетчик исчезает, а новый добавляется после того, как текущий еще не существует.