javascript - 在 React.js 中为新添加的元素设置动画

标签 javascript css reactjs

我有一个 React 组件,它使用 ReactCSSTransitionGroup 进行 CSS 转换,我已经启动并运行了我的服务器,其中包含一个虚拟数据库和一个返回对象数组的 API 调用,然后出于测试目的,我使用 setTimeout 进行查询我的 API 网址:

var ReactCSSTransitionGroup = React.addons.CSSTransitionGroup;

var ItemsList = React.createClass({
    getInitialState: function() {
        return {
            items: [],
            api: {
                getItems: '/api/items'
            }
        }
    },

    componentDidMount: function() {
        this.fetchData();
    },

    fetchData: function() {
        $.get(this.state.api.getItems, function(data) {               
            this.setState({
              items: data
            });
            setTimeout(this.fetchData, 3000);
        }.bind(this));
    },

    render: function() {
        var items = this.state.items.map(function(item, index) {
            return (
                <div className="title" key={index}>                                             
                    {item.title}                    
                </div>
            );
        }.bind(this));
        return (
            <div className="content">
                <ReactCSSTransitionGroup transitionName="example">
                    {items}
                </ReactCSSTransitionGroup>
            </div>      
        );  
    }
});

React.render(
    <ItemsList />,
    document.querySelector('.react')
);

这是 CSS:

.example-enter {
   opacity: 0.01;
}

.example-enter.example-enter-active {
   opacity: 1;
   transition: opacity 2.5s ease-in;
}

.example-leave {
   opacity: 1;
}

.example-leave.example-leave-active {
   opacity: 0.01;
   transition: opacity 2.5s ease-in;
}

我想要实现的是,每次将一个元素添加到数组时,我希望它以动画形式出现,但有一个条件 - 新元素必须出现在列表的顶部。

所以我在 PHP 中执行 orderBy created_at DESC 并成功返回所有对象(按照我想要的顺序),但是 React.js 在顶部呈现新对象然后动画最后一个元素(即使它在顶部添加了一个新元素)。

我做错了什么? :(

最佳答案

想通了!

我不得不做

<div className="title" key={item.id}>                                             
     {item.title}                    
</div>

代替:

<div className="title" key={index}>                                             
     {item.title}                    
</div>

因为 index 来自一个数组,每次添加元素时它都会改变。

关于javascript - 在 React.js 中为新添加的元素设置动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31519455/

相关文章:

html - 设置宽度为父元素的剩余宽度

html - :first-child selector not working on li (list item)

html - TYPO3:更改文件集合中链接的字体大小

reactjs - spring boot jsp页面中如何导入react组件

javascript - 使用额外的 props 将 React 组件分配给变量

javascript - 如何使用 javascript 显示/隐藏 Material Design lite Spinner

javascript - Bootstrap 选项卡在单击时移动

javascript - 在渲染链接到 Navlink 的组件之前隐藏当前组件 - React Router

reactjs - 出现 404-Page Not Found 错误,当我重新加载 Firebase 上的 React 应用程序时

javascript - 在 Javascript 中动态创建一个 div