20

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

      // 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} />}
      />}

红屏死机

4

6 回答 6

49

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

key={(this.state.horizontal ? 'h' : 'v')}
于 2017-06-01T03:33:52.633 回答
29

我用钥匙做到了

    numColumns = {this.state.columnCount}
    key={this.state.columnCount}
于 2019-01-17T11:45:21.793 回答
5

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

<FlatList key={changingValue} .. /> 

应该解决它。

于 2018-04-25T11:37:10.440 回答
4

在钩子里

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

<FlatList
key={numCols}
numColumns={numCols}
...
/>
于 2021-07-31T11:25:37.917 回答
2
<FlatList
         data={props.localFolders}
         style={{ width: "100%" }}
         numColumns={4}
         key={4}
         renderItem={({ item }) => <LocalFolder {...item} />}
         keyExtractor={(item) => item.id.toString()}
/>

为我工作

于 2021-02-18T09:37:11.070 回答
0

我认为信息非常明确。如果要更改列数以强制重新渲染,则需要为纵向/横向定义不同的键。尝试将numCols值连接到keyExtractor.

于 2017-05-31T22:15:40.340 回答