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