我有一个<FlatList data={items} numColumns={2} renderItem={_renderItem} />
,我的物品看起来像[{id:'a',imageUrl:'https://Foo.jpg'}, {id:'b',imageUrl:'https://Bar.jpg'}, {id:'c',imageUrl:'https://Love.jpg'}]
这就是我渲染每个项目的方式
const _renderItem = useCallback(
({item, index}) => {
const media = item as Media;
return (
<MediasFeedItem
media={media}
onPress={() => _onMediaPress(media)}
key={media.id}
size={mediaSize}
isSelected={!!selectedMedias.filter((m) => m.id === media.id).length}
/>
);
},
[
numColumns,
selectedMedias,
props.onPressMedia,
props.onSelectionChange,
props.selectable,
],
);
如果我克隆项目itemsClone = [...items]
,请重新排序itemsClone itemsClone.sort(...)
并更新状态setState({items: itemsClone})
,然后FlatList甚至可以卸载/装载我所有的项目元素(<MediasFeedItem />
)。他们的内容没有改变。因为它们渲染图像,所以每次重新排序列表时,列表都会闪烁。有什么想法可以改善这一点吗?