我在回答自己的问题。请参阅下面的答案。
即使我用this.state.updating解决了问题后,仍然没有运气。显然,这里有多个问题。
事实证明,我重用了为早期应用编写的一些旧FlatList代码,而没有重用对this.state.updating的其他引用,这就是我指向extraData的目的。所以我实际上是在将extraData指向无。关于为什么这只能阻止FlatList在高于0.60.0的版本上使用React Native在Android中进行渲染的最佳猜测:在Android上,React Native 0.60.0和更高版本的速度稍慢,因此我无法如此快地获取数据。这可能意味着在我获取数据之前渲染的页面,并且如果状态保持为浅等于水平,则FlatList不会重新渲染,因此它从不显示任何数据。如果为this.state.updating添加代码不起作用,我将对其进行进一步编辑,但我认为这是问题所在。
我有一个FlatList在React Native> = 0.60.0中在Android中不起作用,但在所有其他情况下都起作用。低于0.60.0的东西在两个平台上都可以,而IOS的任何东西都可以。在使用RN 0.60.0或更高版本的RN中,FlatList始终为空,有时会冻结该应用程序,即使我可以看到控制台中的数据输入正确。这不仅适用于HER 0.60.1中包含的hermes,因为在引入hermes之前,我也遇到了版本问题。在RN 0.59.9上,我没有这个问题,但是坚持59不是长期解决方案。我查看了RN更新日志,但似乎无法弄清问题所在。这是我的代码:
<FlatList
style={styles.listStyle}
bounces={false}
refreshControl={
<RefreshControl
refreshing={this.state.refreshing}
onRefresh={this._onRefresh}
/>
}
data={this.state.notices}
keyExtractor={item => item.id}
initialNumToRender={8}
maxToRenderPerBatch={2}
updateCellsBatchingPeriod={100}
onEndReachedThreshold={0.5}
removeClippedSubviews={true}
windowSize={7}
extraData={this.state.updating}
onEndReached={this._onEndList}
ListFooterComponent={this.renderFooter}
renderItem={({ item }) => (
<View style={styles.hidingOverflow}>
{this.state.loading === false && <TouchableOpacity
style={styles.myBackGround}
onPress={() =>
this.props.navigation.navigate('NoticeDetailScreen', {
noticeDetail: item,
database: databasenum,
threshold: thresholdnum
})} title="Details"
key={item.id} style={styles.myCardStyle}>
<View style={styles.myLayout}>
<View style={styles.myPhotoContainer}>
{item.triggerPhotos.length>0 &&
<View
style={styles.alertImgContainer}
>
<Image source={{ uri: not shown for purposes of this post }} style={styles.alertImg} />
</View>
}
</View>
<View style={styles.listText}>
<View style={styles.hiddingOverflow}>
<View style={styles.hiddingOverflow}>
{item.name !== null && <Text style={styles.titleText}>Name: {item.name}</Text>}
</View>
</View>
{item.updated !== null &&
<Text style={styles.detailsText}>Updated: { item.updated }</Text>}
{item.score !== null &&
<Text style={styles.detailsText}>Top Score: { item.score.toFixed(2) }</Text>}
</View>
<View>
<Text></Text>
</View>
</View>
</TouchableOpacity>}
</View>
)}
/>
我知道这与升级RN应用程序无关,因为我创建了一个新版本而不是更新旧版本。还有其他人处理过吗?谢谢!
编辑:我还应该注意,FlatList在调试期间或使用react-native log-android的控制台中不会在黄色框中触发任何错误消息。
答案 0 :(得分:0)
好的,抱歉,没有其他人可以回答这个问题,因为我没有发布样式表,而这与样式表有关。我没有想到这一点,否则我会将其添加到原始问题中。所以这是答案:
显然,在FlatList(或任何其他组件)内同时具有flex:1的项与位于其上的页面同时具有flex:1的主视图(如果您使用RN的话,包含所有内容的主视图)也不是一件好事或高于0.60.0(在Android上)。在任何平台上,RN在0.60.0以下都可以,并且在IOS中使用任何版本的RN都可以。在Android上,RN> = 0.60.0时,该组件只会短暂出现,然后消失,或者根本不显示。但是,它不会给您任何错误消息。