Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/414.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript TouchableOpacity onPress在ListView内挂起_Javascript_Listview_Reactjs_React Native_React Native Listview - Fatal编程技术网

Javascript TouchableOpacity onPress在ListView内挂起

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

在TouchableOpacity的
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,有很多额外的方法。