在我的应用程序中,我有一个嵌套的可触摸元素。每次我按下其中一个,我只得到一个事件。我可以向下传播内层吗?提前感谢!
代码如下:
<TouchableHighlight style={{ flex: 1 }} onPress={() => { console.log('outer press') }}>
<TouchableHighlight style={{ flex: 0.8, backgroundColor: 'blue' }} onPress={() => { console.log('inner press') }}>
<Text>1</Text>
</TouchableHighlight>
</TouchableHighlight>
3条答案
按热度按时间weylhg0b1#
一个
Touchables
包含一个本地状态,该状态是它的本机状态,而其他Touchables
不知道它。因此,当您触及嵌套的
Touchable
时,事件将传播到访问状态的子元素,并且不会释放资源,除非它已完成下面是嵌套
buttons
的生命周期,如docs
中所述onResponderReject
,父级将无法获得访问权限 *如果父
View
想要阻止子成为触摸启动的响应者,它应该具有返回true
的onStartShouldSetResponderCapture
处理程序。你可以看看这个video
pxq42qpu2#
我已经通过避免两个嵌套的Touchable* 组件解决了这个问题。使用
onStartShouldSetResponderCapture
或pointerEvents
并没有成功实现我的目标。相反,我最终使用了一个视图及其
onTouchStart
事件,因为除了Touchable组件的嵌套onPress事件之外,它还触发了onTouchStart
事件。nnsrf1az3#
难道你不应该删除外部的onPress吗?我不确定我是否理解这个问题,但是尝试在外部的可触摸高亮上使用
event.preventDefault
,以便只访问内部的高亮。