7

I need to toggle on a css class after a component (or even the page) is completely rendered, so that relevant properties are animated on page load.

How do I go about doing this, preferably without jQuery?

If I toggle a component's class in componentDidMount, the animation doesn't actually happen.

5
  • 1
    Please provide a minimum example or piece of code, so we can provide a better answer that will be a useful resource in the future... Commented Nov 13, 2014 at 13:56
  • 1
    .toggleClass? api.jquery.com/toggleclass Commented Nov 13, 2014 at 14:00
  • Whats the question ? Commented Nov 13, 2014 at 14:08
  • Oops, forgot to mention that I'm using react! Commented Nov 13, 2014 at 14:16
  • 1
    fyi take a look into the ReactCSSTransitionGroup, might be useful facebook.github.io/react/docs/animation.html Commented Nov 13, 2014 at 19:10

2 Answers 2

15

I didnt actually get the part where you say:

after a component (or even the page) is completely rendered, so that relevant properties are animated on page load.

When exactly do you want to animate the element ? If you specify the class name in render() function the component will be rendered with animation on page load.

If you want to control/toggle animation after first render, you can control the class name using component state like so:

var Hello = React.createClass({

    getInitialState: function(){
        return {
            condition:false
        }
    },

    handleClick :function(){
        this.setState( { condition : !this.state.condition } );
    },

    render: function() {
        return <div>
                <div className={this.state.condition ? "animated" :""}  >Hello {this.props.name}</div>
                <button type="button" onClick={this.handleClick}>Change Condition</button>

               </div>;
    }
});

React.render(<Hello name="World" />, document.body);

Here I changed the state in response to a button click. You may probably want to change this to some other event you like.

Here is a fiddle for the above code : http://jsfiddle.net/f0j4kt0L/

Sign up to request clarification or add additional context in comments.

3 Comments

So what I want to do is load the animation immediately after the page is loaded. I've tried exactly what you've suggested, but instead changing the this.state.condition in the componentDidMount method. The css class is applied immediately in that case, with no transition.
What happens when you change this line: '<div className="animated">Hello {this.props.name}</div>' ? Doesn't it just work on page load: jsfiddle.net/3fmfous3 ?
this was a super helpful demonstration. really clarified it for me.
1

You can do it using toggle class as well.

var node = ReactDOM.findDOMNode(this.refs.el);
node.classList.toggle('menu-open');

1 Comment

I would say this not the react way of doing stuff.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.