[Android] Incorrect handling of coalescingKey
Nessuno ha ancora preso questa issue.
- Lingua principale
- C++
- Stelle
- 127k
- Fork
- 25.3k
- Merge medio
- 1g 23h
- PR unite (30g)
- 4
Descrizione
Description
In the CustomNativeComponentNativeLayoutEvent class, I’m providing a unique coalescingKey per event:
class CustomNativeComponentNativeLayoutEvent(
surfaceId: Int,
viewId: Int,
val tabBarHeight: Int
) : Event<CustomNativeComponentNativeLayoutEvent>(surfaceId, viewId) {
override fun getEventName() = EVENT_NAME
// Our implementation (coalescing is enabled)
override fun getCoalescingKey(): Short {
return tabBarHeight.toShort()
}
}
But in practice, only some events are being received on the JS side. The logs show events being emitted properly from native:
D emitting from native 914
D emitting from native 3
D emitting from native 7
D emitting from native 11
I Received tabBarHeight on JS side 914
I Received tabBarHeight on JS side 11
D emitting from native 15
D emitting from native 19
I Received tabBarHeight on JS side 19
D emitting from native 22
D emitting from native 26
D emitting from native 30
I Received tabBarHeight on JS side 30
D emitting from native 34
D emitting from native 38
I Received tabBarHeight on JS side 38
I would expect all events to be received since each has a unique coalescingKey.
After a quick investigation, I noticed this part of the code:
It seems like the coalescingKey is not passed forward. Is this expected behavior? Or should that value be forwarded so that events could be properly distinguished and delivered?
Steps to reproduce
- Clone the repo (use the branch from the link) https://github.com/t0maboro/Screens3184/tree/%40t0maboro/issue-1
- Run application on android
- Observe logs with tag:
ReactNativeJS- I used this tag to have native logs filtered together withconsole.logfrom JS
React Native Version
0.82.1
Affected Platforms
Runtime - Android
Output of npx @react-native-community/cli info
System:
OS: macOS 15.6.1
CPU: (10) arm64 Apple M2 Pro
Memory: 101.11 MB / 16.00 GB
Shell:
version: "5.9"
path: /bin/zsh
Binaries:
Node:
version: 24.3.0
path: /opt/homebrew/bin/node
Yarn:
version: 1.22.22
path: /opt/homebrew/bin/yarn
npm:
version: 11.4.2
path: /opt/homebrew/bin/npm
Watchman:
version: 2025.09.15.00
path: /opt/homebrew/bin/watchman
Managers:
CocoaPods:
version: 1.16.2
path: /opt/homebrew/bin/pod
SDKs:
iOS SDK:
Platforms:
- DriverKit 25.0
- iOS 26.0
- macOS 26.0
- tvOS 26.0
- visionOS 26.0
- watchOS 26.0
Android SDK:
API Levels:
- "34"
- "35"
- "36"
Build Tools:
- 34.0.0
- 35.0.0
- 36.0.0
- 36.1.0
- 36.1.0
System Images:
- android-25 | Google APIs ARM 64 v8a
- android-27 | Google APIs ARM 64 v8a
- android-28 | Google APIs ARM 64 v8a
- android-29 | Google APIs ARM 64 v8a
- android-33 | Google APIs ARM 64 v8a
- android-36 | Google Play ARM 64 v8a
Android NDK: Not Found
IDEs:
Android Studio: 2025.1 AI-251.26094.121.2512.13840223
Xcode:
version: 26.0.1/17A400
path: /usr/bin/xcodebuild
Languages:
Java:
version: 17.0.15
path: /usr/bin/javac
Ruby:
version: 3.4.2
path: /Users/tomaszboron/.rbenv/shims/ruby
npmPackages:
"@react-native-community/cli":
installed: 20.0.0
wanted: 20.0.0
react:
installed: 19.1.1
wanted: 19.1.1
react-native:
installed: 0.82.1
wanted: 0.82.1
react-native-macos: Not Found
npmGlobalPackages:
"*react-native*": Not Found
Android:
hermesEnabled: true
newArchEnabled: true
iOS:
hermesEnabled: Not found
newArchEnabled: false
Stacktrace or Logs
D emitting from native 914
D emitting from native 3
D emitting from native 7
D emitting from native 11
I Received tabBarHeight on JS side 914
I Received tabBarHeight on JS side 11
D emitting from native 15
D emitting from native 19
I Received tabBarHeight on JS side 19
D emitting from native 22
D emitting from native 26
D emitting from native 30
I Received tabBarHeight on JS side 30
D emitting from native 34
D emitting from native 38
I Received tabBarHeight on JS side 38
MANDATORY Reproducer
https://github.com/t0maboro/Screens3184/tree/%40t0maboro/issue-1
Screenshots and Videos
No response
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Inizia da FabricEventEmitter.kt alle righe collegate e riproduci il comportamento usando il branch obbligatorio Screens3184. Traccia se il coalescingKey viene preservato tra l’emissione nativa e la consegna a JavaScript, quindi verifica che il comportamento completato distingua gli eventi emessi come previsto.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- android, kotlin
- Ambito
- mobile-dev
- Tipo di issue
- Bug
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 48/100