react native 錯誤:Changing numColumns on the fly is not supported

圖片描述

react native 從 0.44 升級到 0.45,出現上述報錯。react

以前直接修改 FlatList 的 numColumns 變得不可行,報錯其實已經給予瞭解決方法,就是在更改 numColumns 時,同時修改 FlatList 的 key 屬性。app

就拿個人代碼來舉例:ide

個人 FlatList 的 numColumns 有三個可能的值,若是手機不處在 WIFI 鏈接,那麼就 FlatList 的 numColumns 爲 1;若是手機處在 WIFI 鏈接,那麼 numColumns 的數據又由橫屏,豎屏來決定this

下面顯示修改後的代碼,以前的代碼只是少了 key 屬性spa

<FlatList
  data = {this.state.ds}
  renderItem = { this.state.isShowImage ? ({item}) => (
    <TouchableOpacity onPress = {this._changeCoverUrl.bind(this, item.id, this.props.navigation.state.params.information)}>
      <View>
        <Image source = {{uri: item.image}} style = {styles.coverImageSize}/>
      </View>
    </TouchableOpacity>
  ) : ({item}) => (
    <TouchableOpacity onPress = {this._changeCoverUrl.bind(this, item.id, this.props.navigation.state.params.information)}>
      <View style={item.title === undefined ? {} : {
        paddingVertical: 12,
        borderBottomWidth: 1,
        borderColor: '#90CAF9'
      }}>
        <Text style={styles.bookTitle}>{item.title}</Text>
      </View>
    </TouchableOpacity>
  )}
  keyExtractor = {(item) => item.id}
  // key 分別是 vShow, hShow, hide
  key = {(this.state.isShowImage ? (this.deviceHeight > this.state.deviceWidth ? 'vShow' : 'hShow') : 'hide')}
  // 對應有 WIFI 時的橫屏顯示、豎屏顯示,以及無 WIFI 時的顯示
  numColumns = {this.state.isShowImage ? Math.floor(this.state.deviceWidth / 90) : 1}
  columnWrapperStyle = {this.state.isShowImage && {justifyContent: 'space-around', marginVertical: 5}}
  // FlatList最後一欄不能徹底顯示
  style = {{marginBottom: 60}}
/>

實際顯示code

hide

vShow

hShow

相關文章
相關標籤/搜索