javascript - React Native onPress 在其他进程运行时无法触发
问题描述
我正在使用 FlatList 来呈现我的列表,每个列表项都是可点击的;但是,当我单击该项目时,在加载所有内容之前它不起作用。
似乎在其他项目仍在渲染时,您无法执行操作或事件,直到所有内容都完全加载。
这是我的代码:
return (
<FlatList
refreshing={this.props.refreshLoading}
horizontal={false}
initialNumToRender={20}
maxToRenderPerBatch={20}
showsVerticalScrollIndicator={true}
numColumns={2}
onEndReachedThreshold={0.1}
bounces={true}
keyExtractor={(item) => item}
data={userList}
renderItem={(item) => {
return (
<UserCard
index={item.item[1]}
userInfo={item.item[1]}
contentSize={this.state.contentSize}
navigation={this.props.navigation}/>
)
}}
onEndReached={this.onLoadMore}
onRefresh={this.onRefresh}
/>
);
有正确的处理方法吗?
解决方案
这是因为 Javascript 线程被屏幕上的渲染阻塞了。一旦这批行的渲染完成,它将为点击事件打开线程。这种渲染是分批进行的,可以进行调整。
在 Github 上查看此问题。
基本上你可以在列表中使用initialNumToRender
和maxToRenderPerBatch
参数,直到你得到适合你的东西,并且在渲染时看起来不会跳动(它会逐渐渲染列表,如果值太低可能看起来很奇怪 - 称为填充率) .
您可以在 react-native 文档中了解这些参数:
推荐阅读
- asp.net-core - 将策略应用于 asp.net 核心应用程序中的路径
- javascript - 为什么我的 codepen 没有正确实施到我的网站?
- angular - 角路由'拒绝加载字体'...',因为它违反了以下内容安全策略'
- r - Plot created in knitr via cache=TRUE do not keep the specified margin
- javascript - How to return vue.js 'Created' value
- sql-server - SQL Pivot on multiple columns
- javascript - 如何使用 HTML 和 JavaScript 检测 iOS 应用何时进入后台
- javascript - 保存数据时等待 Firebase 响应
- jquery - 克隆并附加到关闭单元格内的 td 元素
- reactjs - React 360/React Vr 的 onInput 不起作用