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

时间:2017-05-31 18:02:50

标签: reactjs react-native react-native-flatlist

我有一个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} />}
      />}

red screen of death

6 个答案:

答案 0 :(得分:22)

来自documentation,看起来你应该做这样的事情

key={(this.state.horizontal ? 'h' : 'v')}

答案 1 :(得分:1)

我认为这个信息很清楚。如果要更改列数以强制重新渲染,则需要为纵向/横向定义不同的键。尝试将numCols值与keyExtractor中的索引连接起来。

答案 2 :(得分:1)

将更改值传递给FlatList本身。它与keyExtractor或renderItem方法中的关键字attrbibute无关:

<FlatList key={changingValue} .. /> 

应该解决它。

答案 3 :(得分:1)

我使用

    numColumns = {this.state.columnCount}
    key={this.state.columnCount}

答案 4 :(得分:0)

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

对我有用

答案 5 :(得分:0)

在钩子中

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

<FlatList
key={numCols}
numColumns={numCols}
...
/>