Skip to content

bug: NewArch Child Touchable surrounded by pointerEvents="box-only" is NOT calling Parent onPress like on oldArch #54271

@dprevost-LMI

Description

@dprevost-LMI

Description

In the code below, when run on oldArch, the child's onPress is cancelled, and instead the Parent's onPress is honoured. On the new arch, it is no longer the case.

We use this in some contexts when a deep, deep component child has a pressable, and we do not need it; instead, we want the parent one to be triggered.

Can we have the same behaviour as on the old architecture?

    <View style={styles.container}>
      <Pressable
        style={styles.parentContainer}
        onPress={handleParentPress}
      >
        <Text style={styles.parentText}>Parent Component</Text>
        <View pointerEvents="box-only">
            <Pressable
              style={styles.childContainer}
              onPress={()=> console.log('Child Pressable pressed!')}
            >
              <Text style={styles.childText}>{title}</Text>
            </Pressable>
        </View>
      </Pressable>
    </View>

Steps to reproduce

  1. Have a Parent touchable and a child touchable.
  2. Wrap your child's toucable with a view using pointerEvents="box-only"
  3. Build on the old arch, press the child and it triggers the parent onPress (expected)
  4. Build on the new arch, press the child, and it triggers the child onPress while we expect the parent one.

React Native Version

0.81.0

Affected Platforms

Runtime - Android

Output of npx @react-native-community/cli info

info Fetching system and libraries information...
System:
  OS: macOS 15.6.1
  CPU: (12) arm64 Apple M2 Pro
  Memory: 74.70 MB / 32.00 GB
  Shell:
    version: "5.9"
    path: /bin/zsh
Binaries:
  Node:
    version: 20.19.4
    path: ~/.nvm/versions/node/v20.19.4/bin/node
  Yarn:
    version: 1.22.22
    path: ~/.nvm/versions/node/v20.19.4/bin/yarn
  npm:
    version: 10.8.2
    path: ~/.nvm/versions/node/v20.19.4/bin/npm
  Watchman:
    version: 2025.08.18.00
    path: /opt/homebrew/bin/watchman
Managers:
  CocoaPods:
    version: 1.16.2
    path: /Users/dprevost/.rbenv/shims/pod
SDKs:
  iOS SDK:
    Platforms:
      - DriverKit 24.2
      - iOS 18.2
      - macOS 15.2
      - tvOS 18.2
      - visionOS 2.2
      - watchOS 11.2
  Android SDK: Not Found
IDEs:
  Android Studio: 2025.1 AI-251.27812.49.2514.14217341
  Xcode:
    version: 16.2/16C5032a
    path: /usr/bin/xcodebuild
Languages:
  Java:
    version: 17.0.16
    path: /usr/bin/javac
  Ruby:
    version: 3.3.3
    path: /Users/dprevost/.rbenv/shims/ruby
npmPackages:
  "@react-native-community/cli":
    installed: 20.0.0
    wanted: 20.0.0
  react:
    installed: 19.1.0
    wanted: 19.1.0
  react-native:
    installed: 0.81.0
    wanted: 0.81.0
  react-native-macos: Not Found
npmGlobalPackages:
  "*react-native*": Not Found
Android:
  hermesEnabled: true
  newArchEnabled: false
iOS:
  hermesEnabled: true
  newArchEnabled: false

Stacktrace or Logs

None

MANDATORY Reproducer

Reproduce on RN 81:
https://github.com/dprevost-LMI/rn81/tree/double-touchable

Reproduce on RN 82:
https://github.com/dprevost-LMI/rn82/tree/double-touchable

Screenshots and Videos

As shown below, under the old arch, pressing the parent or the child, console log Parent Pressable pressed!
Image

Under the new arch, pressing the child output Child Pressable pressed!
Image

I reproduce on RN 82 too.
Image

Metadata

Metadata

Assignees

No one assigned

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions