动态更改 React Native Flat List 中的列数

IT技术 reactjs react-native react-native-flatlist
2021-03-28 04:48:01

我有一个FlatList我想根据方向更改列数的地方。但是,当我这样做时,我得到了红屏。根据红屏错误消息,我不太确定应该如何更改关键props。任何帮助表示赞赏。

      // dynamically changing number of columns
      const numCols = orientation === constants.PORTRAIT ? 3 : 8

      <FlatList
        keyExtractor={(_, i) => i}
        numColumns={numCols} // assigning the number of columns
        horizontal={false}
        renderItem={({ item }) => <ListItem imageUrl={item.url} />}
      />}

死亡红屏

6个回答

文档中,看起来你应该做这样的事情

key={(this.state.horizontal ? 'h' : 'v')}
这有点工作......但是列表将被重新渲染并且滚动位置将从头开始
2021-05-30 04:48:01
为什么不直接使用 numColumns 作为键?
2021-06-17 04:48:01
关键属性对我有用,但是在重新渲染标题时闪烁,因为它是静态的并且对于列表的两个实例都是相同的
2021-06-19 04:48:01

我是用钥匙做的

    numColumns = {this.state.columnCount}
    key={this.state.columnCount}
来这里是为了在答案中添加类似的内容,看起来您已经完成了 ;)
2021-06-22 04:48:01

将不断变化的值传递给 FlatList 本身。它与 keyExtractor 或 renderItem 方法中的关键属性无关:

<FlatList key={changingValue} .. /> 

应该解决它。

在钩子里

const [numCols, setColumnNo] = useState(0);

<FlatList
key={numCols}
numColumns={numCols}
...
/>
<FlatList
         data={props.localFolders}
         style={{ width: "100%" }}
         numColumns={4}
         key={4}
         renderItem={({ item }) => <LocalFolder {...item} />}
         keyExtractor={(item) => item.id.toString()}
/>

为我工作