如何防止本机反应中的父点击事件?

Sho*_*abu 11 javascript react-native

onParentClick = () => {
  console.log('Parent is triggered');
}

onChildClick = (event) => {
  event.stopPropagation();
  console.log('Child is triggered');
}
Run Code Online (Sandbox Code Playgroud)
<TouchableWithoutFeedback onPress={()=> this.onParentClick()}>
  <View>
    <Text>How to prevent parent click event</Text>
    <TouchableOpacity onPress={(event)=> this.onChildClick(event)>
      <Text> Click Me </Text>
    </TouchableOpacity>
  </View>
</TouchableWithoutFeedback>
Run Code Online (Sandbox Code Playgroud)

预期:单击“单击我”时,必须调用 onChildClick()

问题:单击“单击我”时,将调用 onParentClick()。

如何防止父母点击“点击我”的点击事件?

我点击父级时得到的结果是“父级被触发”,它运行完美。

但是点击孩子,我得到的结果是“父母被触发”。

我猜 onChildClick() 没有被触发。

Dmi*_*hov 17

老问题,但我遇到了同样的问题,就我而言,问题是:

import {TouchableOpacity} from 'react-native';
import {TouchableWithoutFeedback} from 'react-native-gesture-handler';
Run Code Online (Sandbox Code Playgroud)

这种奇怪的导入是由于 eslint 的自动建议而发生的。不知何故,这些库不能很好地协同工作,所以我将上面的内容改为:

import {TouchableOpacity, TouchableWithoutFeedback} from 'react-native';
Run Code Online (Sandbox Code Playgroud)

  • 只有第 725 次我从 React-Native-Gesture-Handler 导入 React Native 组件并遇到问题 (6认同)
  • 「救世主!!` (2认同)

小智 4

event.stopPropagation可以阻止事件传播给父母: https://developer.mozilla.org/en-US/docs/Web/API/Event/stopPropagation

onClick 传递的第一个参数是事件本身:

function onChildClick(e) {
    e.stopPropagation();
    console.log('The link was clicked.');
}
Run Code Online (Sandbox Code Playgroud)