Javascript TouchableOpacity onPress在ListView内挂起
在TouchableOpacity的Javascript TouchableOpacity onPress在ListView内挂起,javascript,listview,reactjs,react-native,react-native-listview,Javascript,Listview,Reactjs,React Native,React Native Listview,在TouchableOpacity的onPress事件处理程序中添加rowData参数后,这个ListView UI开始缓慢运行。一旦按下TouchableOpacity,它将保持按下15秒,然后再次平稳运行 似乎存在一些冲突,因为我在上面三行的ListView的renderRow事件处理程序中也使用了rowData 我说得对吗?如何解决这个问题 <ListView dataSource={this.state.dataSource} keyboardShouldPersi
onPress
事件处理程序中添加rowData
参数后,这个ListView UI开始缓慢运行。一旦按下TouchableOpacity,它将保持按下15秒,然后再次平稳运行
似乎存在一些冲突,因为我在上面三行的ListView的renderRow
事件处理程序中也使用了rowData
我说得对吗?如何解决这个问题
<ListView
dataSource={this.state.dataSource}
keyboardShouldPersistTaps={true}
renderRow={(rowData) =>
<TouchableOpacity
onPress={(rowData) => {
console.log(rowData);//ON THIS LINE IT HANGS 15s
}}
>
<Text>{rowData}</Text>
</TouchableOpacity>
}
automaticallyAdjustContentInsets={false}
/>
{
console.log(rowData);//在这一行上它挂起15秒
}}
>
{rowData}
}
automaticallyAdjustContentInsets={false}
/>
我真的很想解释一下,在javascript中这是一个如此昂贵的操作,但问题是当rowData
已在上层范围(renderRow
中声明时,您正在将rowData
作为参数传递给onPress
函数。是的,就像你说的,发生了碰撞
实际上,由于onPress
函数接收触摸事件作为参数,因此rowData
的值被onPress
重新定义。(您会注意到记录的数据实际上不是原始行数据,而是一个触摸事件对象)
只需重命名onPress
函数的第一个参数即可解决此问题。e、 g
<TouchableOpacity
onPress={(evt) => {
console.log(rowData); //now it doesn't hang
}}
>
{
console.log(rowData);//现在它不挂起
}}
>
我真的很想解释一下,在javascript中这是一个如此昂贵的操作,但问题是当rowData
已在上层范围(renderRow
中声明时,您正在将rowData
作为参数传递给onPress
函数。是的,就像你说的,发生了碰撞
实际上,由于onPress
函数接收触摸事件作为参数,因此rowData
的值被onPress
重新定义。(您会注意到记录的数据实际上不是原始行数据,而是一个触摸事件对象)
只需重命名onPress
函数的第一个参数即可解决此问题。e、 g
<TouchableOpacity
onPress={(evt) => {
console.log(rowData); //now it doesn't hang
}}
>
{
console.log(rowData);//现在它不挂起
}}
>
我们可以在Webview中放置标题吗?像
render(){//eslint disable line类方法使用
返回(
this.popRoute()}>
寻找商店
);
我们可以在Webview中放置标题吗?像
render(){//eslint disable line类方法使用
返回(
this.popRoute()}>
寻找商店
);
rowData中的数据有多大?大约有5个对象,在调试模式下运行可能会提高速度。这是一个事件(请参见下面的注释)。事件非常大。rowData中的数据有多大?大约5个对象,在调试模式下运行可能会提高速度。这就是事件(请参见下面的注释)。这是一个巨大的事件,下面是解释。正如MichaelHelvey所说,原始的rowData是evt。当您尝试对evt进行console.log时,它是巨大的。您可以通过输入console.log(Object.keys(evt))来验证这一点。太快了。此外,如果您想实际查看事件,最好放入调试器。不同之处在于调试器将console.log对象,并为您提供展开树以查看更深层次。没有调试器的console.log不是交互式的。因此,它试图打印出整个树。它是关于一个DOM的大小,有很多额外的方法。正如MichaelHelvey所说,原始的rowData是evt。当您尝试对evt进行console.log时,它是巨大的。您可以通过输入console.log(Object.keys(evt))来验证这一点。太快了。此外,如果您想实际查看事件,最好放入调试器。不同之处在于调试器将console.log对象,并为您提供展开树以查看更深层次。没有调试器的console.log不是交互式的。因此,它试图打印出整个树。它的大小相当于一个DOM,有很多额外的方法。