#reactjs
#reactjs
Вопрос:
У меня есть компонент анимации реакции внутри блока if следующим образом;
import { CSSTransitionGroup } from 'react-transition-group'
......
......
......
......
render() {
return(
<div className="App"
{
this.state.isloading
? <div className="loader"></div>
: <CSSTransitionGroup
transitionName="example"
transitionEnterTimeout={1000}
transitionLeaveTimeout={750}
>
{this.state.hot_list.length > 0
? <Displaycont hot_list={this.state.hot_list} />
: null}
</CSSTransitionGroup>
}
</div>
)
}
При этом анимация отображается не только для компонента «Displaycont».
Если я удалю блок If, анимация будет отображаться так, как ожидалось. Я оформляю ее так, как показано здесь;
https://reactjs.org/docs/animation.html#low-level-api-reacttransitiongroup
Есть идеи, что я могу делать неправильно?
Ответ №1:
CSSTransitionGroup
должна быть всегда смонтирована, и только ее дочерние элементы должны быть отображены условно.
Я не уверен в причине, но все примеры документации React делают это таким образом. Я думаю, это из-за CSSTransitionGroup
методов жизненного цикла и того, как они работают.
Однако вот как вы можете это сделать:
render () {
const { isLoading, hot_list } = this.state
return (
<div className='App'>
{ isLoading ? <div className='loader' /> : null }
<CSSTransitionGroup
transitionName='example'
transitionEnterTimeout={1000}
transitionLeaveTimeout={750}
>
{ isloading amp;amp; hot_list.length > 0 ? <Displaycont hot_list={hot_list} /> : null }
</CSSTransitionGroup>
</div>
)
}
Комментарии:
1. Спасибо! Кажется, это решило проблему. Анимация визуализируется после удаления условного рендеринга из
CSSTransitionGroup
компонента.2. Добро пожаловать! Если вам интересно, почему это происходит, вы можете взглянуть на исходный код CSSTransitionGroup . Если ответ вам помог, вы можете рассмотреть возможность проголосовать / принять его. Спасибо!
3. Я проголосовал за ваш ответ, но у меня еще недостаточно репутации : (чтобы быть засчитанным как «реальный» голос :). Думаю, мне придется вернуться, когда я стану достаточно взрослым, чтобы провести настоящее голосование 🙂
4. Это потому, что у вас была репутация 14. для получения привилегий голосования требуется 15 повторений. Теперь у вас достаточно репутации для голосования и принятия. Всего наилучшего! 🙂