@uzi_no_uzi

Анимация повторяется в ReactCSSTransitionGroup?

Я сделал плавное появление компонентов при помощи ReactCSSTransitionGroup, но анимация по какой-то причине появляется дважды

import React from 'react';
import ReactCSSTransitionGroup from 'react-addons-css-transition-group';

import WorkItem from '../WorkItem';

class PortfolioSectionPanel extends React.Component {

    constructor() {
        super();

        this.state = {
            showWorks: false,
            works: [
                {
                    type: 'Some',
                    link: 'some',
                },
                {
                    type: 'Some1',
                    link: 'some1',
                },
                {
                    type: 'Some',
                    link: 'some',
                },
                {
                    type: 'Some1',
                    link: 'some1',
                },
                {
                    type: 'Some',
                    link: 'some',
                },
                {
                    type: 'Some',
                    link: 'some',
                },
            ]
        }

        this.showWorks = () => {
            this.setState({
                showWorks: !this.state.showWorks,
            })

            console.log(1)
        }

    }
    
    render() {

        let workItems;

        if(this.state.showWorks) {
            let {works} = this.state;

            const angleRad = 360 / works.length * 0.017; //Частота кругов в радианах
            const bg = document.getElementById('portfolio-panel-disk');
            let radius;
            if(bg) {
                radius = parseInt(getComputedStyle(bg).width) / 2;
                console.log(radius)
            }

            workItems = works.map((currentValue, index) => {
                return <WorkItem 
                        type={currentValue.type} 
                        link={currentValue.type} 
                        key={index} 
                        leftOffset={radius - radius * Math.cos(angleRad * index)}
                        topOffset={radius - radius * Math.sin(angleRad * index)}  />
            })
        } else {
            workItems = null;
        }
   
        return(

            <div className={this.props.freshClass}>
                <div className={this.props.classForBg} onTransitionEnd={this.showWorks} >
                    <div className='portfolio-panel-disk' id='portfolio-panel-disk'>
                        <ReactCSSTransitionGroup
                        transitionName='work-item'
                        transitionEnterTimeout={500}
                        transitionLeaveTimeout={500}>
                            {workItems}
                        </ReactCSSTransitionGroup>
                    </div>
                </div>
            </div>
        )
    }
}
    

export default PortfolioSectionPanel;


Вот css код, который я использую (less)

.work-item {
    width: 300px;
    height: 300px;
    background-color: blue;
    transform:translate(-50%, -50%);
    position: absolute;
    border-radius: 50%;

    &-enter {
        opacity: 0;
        transition: .5s;
    }

    &-enter-active {
        opacity: 1;
    }

    &-leave {
        opacity: 1;
        transition: .5s;
    }

    &-leave-active {
        opacity: 0;
    }
}


Получается вот что: dm-K5IB.gif

В чем может быть проблема?
  • Вопрос задан
  • 65 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы