javascript - 如何使用 React Native FlatList 动画重新排序?

标签 javascript reactjs animation react-native react-native-flatlist

我有一些看起来像这样的 UI:

enter image description here

这些列表项可以:(1) 添加,(2) 删除,(3) 重新排序。

重新排序不是拖放,而是在单击选中/空圆圈图标时发生 - 选中的项目始终位于列表顶部。

在 React Native (here's one such example) 中有许多动画添加/删除列表项的示例。

但是我怎样才能使列表的排序动画化呢?特别是在我的例子中,这将是两个列表项交换位置。

我看过react-native-sortable-list和其他一些开源项目,但我认为这可能有点矫枉过正,因为我不需要需要拖放。此外,我已经加入了一些 FlatList 事件,如 onLayoutonContentSizeChangeonScroll,所以我更喜欢一个允许我制作动画的解决方案直接是 FlatList 的子级。

最佳答案

平面列表按照您通过 data 属性提供给它的数组的顺序进行排序。无论您是使用组件级状态(即 this.state )还是 redux 来管理您的状态,您都可以重新排序元素数组,它应该按该顺序重新呈现。例如,一种实现方式可能是:

const checkedData = [...this.state.data].filter(item => item.checked === true);
const uncheckedData = [...this.state.data].filter(item => item.checked !== true);
const sortedData = checkData.concat(uncheckedData);
this.setState({ data: sortedData });

javascript 过滤器函数应保留子集的原始排序顺序。

要使其动画化,您可以查看 LayoutAnimation在 native react 中。它会将动画类型应用于渲染之间 View 中的每个更改。

关于javascript - 如何使用 React Native FlatList 动画重新排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49674380/

相关文章:

javascript:如何从window.opener访问window.top?

javascript - React-Bootstrap 内联表单无法按预期工作

javascript - OpenLayers3 中的特征动画

ios - 如何制作连续翻转的动画?

javascript - 滚动时使用 ajax 加载内容

javascript - 向所选段落添加类(contenteditable div)

javascript - React/Redux - 将新状态设置为一个数组状态

javascript - 切换屏幕时 useEffect 不起作用

Java 在 Canvas 上滚动文本

javascript - 在 jQuery 中如何使用偏移量进行迭代?