Как показать элементы при событии React?

114
17 марта 2021, 10:20

Имеется вот такой React компонент, в который импортирован компонент WorkItem.

При завершении анимации (смотреть onTransitionEnd) нужно показать эти компоненты WorkItem, как это возможно сделать?

import React from 'react'; 
import Slider from "react-slick"; 
 
import WorkItem from '../WorkItem'; 
 
class PortfolioSectionPanel extends React.Component { 
 
    constructor() { 
        super(); 
 
        this.state = { 
            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 = () => { 
            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 * 20; 
            } 
 
            let 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)}  /> 
            }) 
 
            return workItems 
        } 
 
    } 
     
    render() { 
    
        return( 
 
            <div className={this.props.freshClass}> 
                <div className={this.props.classForBg} onTransitionEnd={this.showWorks} > 
                    <div className='portfolio-panel-disk' id='portfolio-panel-disk'> 
                        {workItems} 
                    </div> 
                </div> 
            </div> 
        ) 
    } 
} 
     
 
export default PortfolioSectionPanel;

Answer 1

Значение workItems не определено в методе render.

render() {
  const workItems = this.showWorks(); 
  return (
          <div className={this.props.freshClass}>
                <div className={this.props.classForBg} onTransitionEnd={this.showWorks} >
                    <div className='portfolio-panel-disk' id='portfolio-panel-disk'>
                        {workItems}
                    </div>
                </div>
            </div>
        )
}

Пример на sandbox https://codesandbox.io/embed/polished-glade-jkz5d

READ ALSO
Javascript реализация стрелок в input number - The specified value &ldquo;NaN&rdquo; is not a valid number

Javascript реализация стрелок в input number - The specified value “NaN” is not a valid number

У меня есть корзина товаров, в которой может быть множество различных сущностейИ я пытаюсь реализовать изменения кол-во товара с помощью...

117
(x &lt;= 100) тоже самое что и !(x &gt; 100)?

(x <= 100) тоже самое что и !(x > 100)?

На learnjs в тестах был такой вопросик:

80
~ что значит этот символ в javascript?

~ что значит этот символ в javascript?

Что значит данный символ ~ в этом поле?

120
Частичная инициализация вектора

Частичная инициализация вектора

Для последовательной инициализации элементов в вектор их можно добавлять через push_back и emplace_backА что если есть некоторая перестановка индексов,...

101