【发布时间】:2017-11-06 07:48:54
【问题描述】:
我有一个高分列表,每分钟自动更新一次当前分数。
然后它使用this.setState({ data: newData }); 更新组件。
在我sort 下按分数新数据,通过map 运行每个项目,更新他们的style.top。
Javascript
...
let current = this.state.data.sort((a,b) => {
if(a.score < b.score) return -1;
if(a.score > b.score) return 1;
return 0;
});
let items = current.map((item,i) => {
return (
<div
key={item.name}
className="item"
style={{ top: (i*30) + 'px', backgroundColor: item.color }}>
{item.name}
</div>
);
});
return (
<div>
{items}
</div>
);
CSS
.item {
position: absolute;
transition: top 1s;
}
我希望项目上下动画到它们的新位置,但这不会发生。浏览器似乎记住了 DOM 的一部分,但没有记住其他部分。
如果我使用 React 开发人员工具进行检查,React 似乎可以通过唯一键了解哪个项目是哪个项目,但实际的 DOM 并没有。
即使是陌生人,似乎也只会记住列表中向上移动的项目(更高的分数)。向下移动的项目被重新创建,因此过渡不起作用。他们只是突然出现而没有过渡到他们的新职位。
【问题讨论】:
标签: javascript reactjs transition