#javascript #reactjs #react-motion
#javascript #reactjs #реагирует-движение
Вопрос:
Как мы можем снова выполнить анимацию в обратном направлении после ее немедленного завершения? Это работает нормально, если я делаю this.setState({slideUp: !this.state.slideUp});
внутри обработчика щелчков. Просто при настройке состояния в функции rest анимации это не работает, и я не могу понять, почему.
constructor(props)
{
this.state = {
slideUp: true
}
}
_shuffleAnimationCallback = () => {
...
this.setState({slideUp: !this.state.slideUp});
}
<Motion defaultStyle={{heightToInterpTo: 100}} style={{heightToInterpTo: spring(this.state.slideUp ? 0 : 100)}} onRest={() => this._shuffleAnimationCallback()}>
{(values) => <ul style={{
WebkitTransform: `translate3d(0, ${values.heightToInterpTo}%, 0)`,
transform: `translate3d(0, ${values.heightToInterpTo}%, 0)`,}>
{this.state.playlistComponent}
</ul>}}
</Motion>
Комментарии:
1. вы пробовали устанавливать состояние в setTimeout / requestAnimationFrame?
setTimeout( () => this.setState({slideUp: !this.state.slideUp}), 10 );
2. @mauron85 Немного взлом, но это работает хорошо. Отправьте ответ, и, если не появится лучший, я отмечу ваш. Использование тайм-аута 0 работает. Вы знаете, почему это работает?
3. Мне нужно было бы проверить исходный код библиотеки Motion, чтобы дать вам правильный ответ. Я могу только догадываться. Возможно, это как-то связано с setState. Можете ли вы войти
this.state.slideUp
в систему перед вызовом setState в обоих случаях (с оболочкой тайм-аута и без нее)?