React ReactCSSTransitionGroup添加动画新项目到列表顶部?

时间:2015-12-09 00:03:12

标签: animation reactjs reactcsstransitiongroup

我一直在寻找一个例子,将项目添加到带有react的列表中,并让它为新添加的项目设置动画,但不是列表的末尾,而是列表的开头。我找到了这个例子,但是我已经在本地和网上做了所有的混乱,我似乎无法在添加到数组中的第一个点时让项目动画。这是一个简单的反应待办事项添加项目。如何将项目添加到第一个位置,并将动画制作到第一个位置?

JS小提琴:http://jsfiddle.net/kb3gN/13152/

var ReactCSSTransitionGroup = React.addons.CSSTransitionGroup;

var TodoList = React.createClass({
  getInitialState: function() {
    return {items: ['hello', 'world', 'click', 'me']};
  },
  handleAdd: function() {
    var newItems =
      this.state.items.concat([prompt('Enter some text')]);
    this.setState({items: newItems});
  },
  handleRemove: function(i) {
    var newItems = this.state.items;
    newItems.splice(i, 1)
    this.setState({items: newItems});
  },
  render: function() {
    var items = this.state.items.map(function(item, i) {
      return (
        <TodoItem item={item} key={item} onClick={this.handleRemove.bind(this,     i)}/>
      );
    }.bind(this));
    return (
      <div>
        <div><button onClick={this.handleAdd}>Add new</button></div>
        <ReactCSSTransitionGroup transitionName="example">
          {items}
        </ReactCSSTransitionGroup>
      </div>
    );
  }
});

React.render(<TodoList/>, document.getElementById('list'));

1 个答案:

答案 0 :(得分:1)

您的问题是您附加到待办事项列表。如果添加到前面,则生成的动画就是您要查找的内容。

handleAdd更改为:

handleAdd: function() {
  var newItems = this.state.items;
  newItems.unshift([prompt('Enter some text')]);
  this.setState({items: newItems});
},

关键是使用unshift代替push。浏览mdn docs以了解差异