2017-01-25 3 views
5

클릭하면 BasketContents 구성 요소를 토글해야하는 Basket 구성 요소가 있습니다. 이 작품 :요소 페이드 인

constructor() { 
    super(); 
    this.state = { 
     open: false 
    } 
    this.handleDropDown = this.handleDropDown.bind(this); 
    } 
    handleDropDown() { 
    this.setState({ open: !this.state.open }) 
    } 
    render() { 
     return(
      <div className="basket"> 
       <button className="basketBtn" onClick={this.handleDropDown}> 
        Open 
       </button> 
       { 
       this.state.open 
       ? 
       <BasketContents /> 
       : null 
       } 
      </div> 
     ) 
    } 

는 그것은 BasketContents 구성 요소를 표시하거나하지 하나에 조건을 사용합니다. 나는 이제 그것을 페이드 인시키고 싶다. BasketContentsComponentDidMount 훅을 추가하여 불투명도를 전환하려고 시도했지만 작동하지 않는다. 이 작업을 수행하는 간단한 방법이 있습니까?

+2

''처럼 보이십니까? ' '를 렌더링하는 3 진수 대신에 항상 렌더링하지만'this.state'를 사용하여 불투명도/가시성 전환으로 클래스 이름을 설정하십시오 –

+0

이것을 사용할 수 있습니다 - http://mxstbr.blog/2015/ 07/fade-in-react/ –

답변

4

예 CSS 클래스 토글 + 불투명도 전환 사용 :
https://jsfiddle.net/e7zwhcbt/2/

여기에 흥미로운 CSS의 :

.basket { 
    transition: opacity 0.5s; 
    opacity: 1; 
} 
.basket.hide { 
    opacity: 0; 
    pointer-events:none; 
} 

그리고 렌더링을 기능 : 당신의`render`을 무엇

render() { 
    const classes = this.state.open ? 'basket' : 'basket hide' 
    return(
     <div className="basket"> 
     <button className="basketBtn" onClick={this.handleDropDown}> 
      {this.state.open ? 'Close' : 'Open'} 
     </button> 
     <BasketContents className={classes}/> 
     </div> 
    ) 
    } 
+0

완벽 - 나는이 덕분에 @ Daniel_L의 설명을 이미하고 있었지만 이것은 정답이다. 감사. – GluePear

2

이 같은 반응 모션 사용합니다 :

<Motion style={{currentOpacity: spring(this.state.open ? 1 : 0, { stiffness: 140, damping: 20 })}}> 
    {({currentOpacity}) => 
     <div style={{opacity: currentOpacity}}> 
      <BasketContents /> 
     </div> 
    } 
</Motion> 

나는 그것을 테스트하지 않은,하지만 그것을 작동합니다.

+0

ReactTransitionGroup이 사용 중지 될 것이라는 소식을 들었습니까? –

+1

그것은 원래 https://github.com/facebook/react/issues/8854 여기에 비추천의 목록에 있었지만 지금은 (토론에 따라) 그들은 그것을 유지하고 그것을 재작 성하기로 결정했습니다 ... –

+0

그래서 ... 귀하의 답변에 판을 제안 해 주시겠습니까? ;) –