React native 反应本机:查看onPress不起作用
我正面临一个奇怪的问题。在我的react native应用程序中,如果我将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
onPress
事件设置为View
,则不会触发,但如果我将其设置为Text
insideView
,则会触发。我错过了什么
<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道具onStartShouldSetResponder和onResponderGrant
<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>