反应 CSSTransitionGroup 删除的项目转移到结束
React CSSTransitionGroup deleted item shifted to end
我正在使用 CSSTransitionGroup
插件来制作向数组中添加和删除项目的动画。添加时,动画按预期执行,但在移除时,移除的项目会在动画开始之前移动到末尾。我是 React 的新手,但我假设 React 如何协调数组更改的幕后发生了一些事情?
由于 React 的 key
细节,您的删除语句出错。
请参阅动态组件(您拥有的)的解释 here,以及如何将它们与“key”一起使用。
要修复,请将子映射中的 return
语句更改为:
return <Item key={item} item={item}/>;
并创建一个名为 <Item>
的新(纯)组件:
var Item = React.createClass({
render: function() {
return <div>{this.props.item}</div>;
}
});
我在您的 fiddle 中试过了,它有效。希望 this link 会给你更新后的 fiddle。
顺便说一句:与 fiddle 一致,我的更改是快速而肮脏的解决方案:react 期望键是唯一的并且与列表中项目的内容相关。我的例子确实满足了第二个要求(请不要使用映射索引作为键),但它在第一个上失败了:如果你添加,然后删除,然后添加,示例代码将产生下一个具有相同编号的项目(不是唯一的),所以它失败了。
我正在使用 CSSTransitionGroup
插件来制作向数组中添加和删除项目的动画。添加时,动画按预期执行,但在移除时,移除的项目会在动画开始之前移动到末尾。我是 React 的新手,但我假设 React 如何协调数组更改的幕后发生了一些事情?
由于 React 的 key
细节,您的删除语句出错。
请参阅动态组件(您拥有的)的解释 here,以及如何将它们与“key”一起使用。
要修复,请将子映射中的 return
语句更改为:
return <Item key={item} item={item}/>;
并创建一个名为 <Item>
的新(纯)组件:
var Item = React.createClass({
render: function() {
return <div>{this.props.item}</div>;
}
});
我在您的 fiddle 中试过了,它有效。希望 this link 会给你更新后的 fiddle。
顺便说一句:与 fiddle 一致,我的更改是快速而肮脏的解决方案:react 期望键是唯一的并且与列表中项目的内容相关。我的例子确实满足了第二个要求(请不要使用映射索引作为键),但它在第一个上失败了:如果你添加,然后删除,然后添加,示例代码将产生下一个具有相同编号的项目(不是唯一的),所以它失败了。