3

I have been exploring animations with the ReactCSSTransitionGroup props transitionAppear and transitionEnter.

These animate the entry of the notes onscreen but the initial load of the list renders all the items at once.

Is there a way to add a delay to the rendering of each item on initial load so that they do not appear at once?

You can see the full code here

var NotesList = React.createClass({
  render: function(){
    var notes = this.props.notes.map(function(note, index){
      return (<li className="list-group-item" key={index}>
                <b>{note}</b>
              </li>);
    })
    return (
      <ul className="list-group">
        <ReactCSSTransitionGroup transitionName="fade" transitionAppear={true} transitionAppearTimeout={500} transitionEnterTimeout={500} transitionLeaveTimeout={300}>
            {notes}
         </ReactCSSTransitionGroup>
      </ul>
    )
  }
});
1
  • Check this similar question: stackoverflow.com/questions/31702054/… Also, I've used React-bootstrap transitions as I find the library easier to use. But I think, back to your example, that transitionAppear prop should not be used for all children, and trigger each animation based on completion of the previous ones. Commented Aug 2, 2016 at 13:02

1 Answer 1

3

Since you're looping over the items to render them, you can use the index to assign a growing transition-delay to each item (demo):

var NotesList = React.createClass({
  firstTime: true, // is this the 1st render
  render: function(){
    var delay = this.firstTime ? 500 : 0 // delay 500 for first time, 0 for all others
    var notes = this.props.notes.map(function(note, index){
      // add the transition-delay using the index to increment it
      return (<li className="list-group-item" key={index} style={{ transitionDelay: `${index * delay}ms` }}>
                <b>{note}</b>
              </li>);
    })

    this.firstTime = false // turn of first time

    return (
      <ul className="list-group">
        <ReactCSSTransitionGroup transitionName="fade" transitionAppear={true} transitionAppearTimeout={500} transitionEnterTimeout={500} transitionLeaveTimeout={300}>
            {notes}
         </ReactCSSTransitionGroup>
      </ul>
    )
  }
});
Sign up to request clarification or add additional context in comments.

Comments

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.