2017-01-25 10 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


https://jsfiddle.net/e7zwhcbt/2/

ここで興味深いCSSです''のように見えますか? ' 'をレンダリングする三項の代わりに、私はいつもレンダリングしますが、' this.state'を使用して不透明度/可視性遷移を持つクラス名を設定してください。 –

+0

これを使うことができます - http://mxstbr.blog/2015/ 07/fade-in-react/ –

答えて

4

例:

.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> 

私はそれをテストしていませんが、それが動作するはずです。

CSSクラストグル+不透明度遷移を使用して
+0

ReactTransitionGroupは廃止予定だと言っているのですか? –

+1

これはもともとは廃止予定のリストhttps://github.com/facebook/react/issues/8854に掲載されていましたが、今では(ディスカッションによると)彼らはそれを保存して書き直すと決めました... –

+0

だから...あなたの答えに版を提案してもよろしいですか? ;) –

関連する問題