如果数据重新排序,请不要重新渲染ReactNative平面列表项

时间:2020-08-29 11:43:20

标签: javascript reactjs react-native

我有一个<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 />)。他们的内容没有改变。因为它们渲染图像,所以每次重新排序列表时,列表都会闪烁。有什么想法可以改善这一点吗?

0 个答案:

没有答案
相关问题