Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I animate a react.js component onclick and detect the end of the animation

I want to have a react component flip over when a user clicks on the DOM element. I see some documentation about their animation mixin but it looks to be set up for "enter" and "leave" events. What is the best way to do this in response to some user input and be notified when the animation starts and completes? Currently I have a list item and I want it to flip over an show a few buttons like delete, edit, save. Perhaps I missed something in the docs.

animation mixin

http://facebook.github.io/react/docs/animation.html

like image 376
Tim Avatar asked Jun 08 '14 23:06

Tim


People also ask

How do you animate on click in React?

You can use CSS classes to animate in React import React, { useState } from 'react'; import classNames from 'classnames'; import styles from './App. module. css'; const App = () => { const [animate, setAnimate] = useState(false); const handleClick = () => setAnimate(!

Can you add onClick to React component?

The React onClick event handler enables you to call a function and trigger an action when a user clicks an element, such as a button, in your app. Event names are written in camelCase, so the onclick event is written as onClick in a React app. In addition, React event handlers appear inside curly braces.


2 Answers

Upon clicks you can update the state, add a class and record the animationend event.

class ClickMe extends React.Component {   constructor(props) {     super(props)     this.state = { fade: false }   }   render() {     const fade = this.state.fade      return (       <button         ref='button'         onClick={() => this.setState({ fade: true })}         onAnimationEnd={() => this.setState({ fade: false })}         className={fade ? 'fade' : ''}>         Click me!       </button>     )   } } 

See the plnkr: https://next.plnkr.co/edit/gbt0W4SQhnZILlmQ?open=Hello.js&deferRun=1&preview

Edit: Updated to reflect current React, which supports animationend events.

like image 146
arve0 Avatar answered Sep 21 '22 09:09

arve0


React uses synthetic events, which includes animation events. Documention found here: https://reactjs.org/docs/events.html#animation-events. I updated the accepted answer below:

class ClickMe extends React.Component {   state = {fade: false};    render () {     const {fade} = this.state;      return (       <button         onClick={() => this.setState({fade: true})}         onAnimationEnd={() => this.setState({fade: false})}         className={fade ? 'fade' : ''}>           Click me!       </button>     )   } } 
like image 24
Matt Goo Avatar answered Sep 17 '22 09:09

Matt Goo