React native 反应本机:查看onPress不起作用

React native 反应本机:查看onPress不起作用,react-native,react-native-android,React Native,React Native Android,我正面临一个奇怪的问题。在我的react native应用程序中,如果我将onPress事件设置为View,则不会触发,但如果我将其设置为TextinsideView,则会触发。我错过了什么 <View style={{backgroundColor: "red", padding: 20}}> <Text onPress={()=> { console.log('works'); } }>X</Text> </View&g

我正面临一个奇怪的问题。在我的react native应用程序中,如果我将
onPress
事件设置为
View
,则不会触发,但如果我将其设置为
Text
inside
View
,则会触发。我错过了什么

<View style={{backgroundColor: "red", padding: 20}}>
  <Text onPress={()=> {
    console.log('works');
    }
  }>X</Text>
</View>


<View style={{backgroundColor: "red", padding: 20}} onPress={()=> {
    console.log('does not work');
    }
  }>
  <Text>X</Text>
</View>

{
console.log('works');
}
}>X
{
console.log('notwork');
}
}>
X

为什么会这样?这是React Native的问题吗?我使用的是0.43版

您可以使用
TouchableOpacity
处理
onPress
事件。
View
不提供
onPress
prop

<TouchableOpacity style={{backgroundColor: "red", padding: 20}} onPress={()=> {
    console.log('does not work');
    }
  }>
  <Text>X</Text>
</TouchableOpacity>
{
console.log('notwork');
}
}>
X

您可以使用一个无反馈的
触摸屏来包装视图
,然后像往常一样使用
onPress
和friends。此外,您还可以通过在子视图上设置属性on来阻止
指针事件
,它甚至可以阻止父视图上的指针事件,而无需反馈,这很有趣,这是我在Android上的需要,我没有在iOS上测试:


您可以使用TouchableOpacity、TouchableHighlight、TouchableNativeFeedback来实现这一点。视图组件不提供onPress作为道具。所以你用这些来代替那个


或者,您也可以向视图提供onStartShouldSetResponder,如下所示:

<View onStartShouldSetResponder={() => console.log("View click")}>
  // some code here
</View>
console.log(“查看单击”)}>
//这里有一些代码

视图不提供onPress道具可选您可以使用

<View onStartShouldSetResponder={() => console.log("View click")}>
  <Text>X</Text>
</View>
console.log(“查看单击”)}>
X
否则您可以使用TouchableOpacity

<TouchableOpacity onPress={this._onPress}>
<Text>X</Text>
</TouchableOpacity>

X

对于任何正在寻找解决方案的人,从RN 0.63开始,都有一个新的api。它可能在更早的时候推出了几个版本,但是对于这样的用例来说它非常有效

<Pressable onPress={onPressFunction}>
    <Text onPress={() => {
        console.log('works');
    }}>X</Text>
</Pressable>

{
console.log('works');
}}>X

onPress在
标签上不起作用,请使用
而不是查看

<View>
<TouchableOpacity onPress={() => 'call your function here'}>
</TouchableOpacity>
</View>

'在此处调用函数'}>

我们可以让视图有一个onPress道具onStartShouldSetResponderonResponderGrant

<View
    onStartShouldSetResponder={() => true}
    onResponderGrant={() => console.log("view pressed")}
  >
</View>
true}
onResponderGrant={()=>console.log(“按视图”)}
>

这里有完整的参考文档:onPress可以使用异步函数作为回调函数吗?我在官方文档中没有提到这一点。在iOS上进行了测试,效果很好。有可触摸无反馈和可触摸强光谢谢分享@habed!子块上的
指针EventsNone
是否按压包装父块?
<View
    onStartShouldSetResponder={() => true}
    onResponderGrant={() => console.log("view pressed")}
  >
</View>