web-dev-qa-db-fra.com

React fondu dans l'élément

J'ai un composant Basket qui doit basculer un composant BasketContents lorsque l'on clique dessus. Cela marche:

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>
        )
    }

Il utilise un conditionnel pour afficher ou non le composant BasketContents. Je veux maintenant qu'il apparaisse progressivement. J'ai essayé d'ajouter un crochet ComponentDidMount à BasketContents pour faire la transition de l'opacité mais cela ne fonctionne pas. Existe-t-il un moyen simple de procéder?

13
GluePear

Un exemple utilisant le basculement de classe css + les transitions d'opacité:
https://jsfiddle.net/e7zwhcbt/2/

Voici le CSS intéressant:

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

Et la fonction de rendu:

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>
    )
  }
12
Giladd

J'utiliserais React-Motion comme ceci:

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

Je ne l'ai pas testé, mais ça devrait marcher.

3
Michal Cumpl

J'ai utilisé react-animate-on-scroll personnellement. accessoires majeurs (jeu de mots voulu) à son créateur @dbramwell sur github. Trié mes critères en environ 5 minutes. BOOM. ????

0
NewbieAid