rnn-codebase
por wix
Navegar y trabajar con el código base de react-native-navigation (RNN). Úsalo al corregir errores, agregar funciones, rastrear flujos de comandos, entender opciones…
npx skills add https://github.com/wix/react-native-navigation --skill rnn-codebaseReact Native Navigation Codebase
Architecture Overview
RNN has three layers that mirror each other:
JS/TS (src/) → TurboModule bridge → iOS native (ios/)
→ Android native (android/)
A navigation command (e.g. push) flows:
Navigation.push()→Commands.ts→ processing pipeline →NativeCommandsSender.ts- TurboModule:
RNNTurboModule(iOS) /NavigationTurboModule.kt(Android) - iOS:
RNNCommandsHandler→RNNViewControllerFactory→ UIKit controllers - Android:
Navigator→LayoutFactory→ View-based controllers (no Fragments)
Read ARCHITECTURE.md for the full overview.
Key Cross-Layer Mappings
Layout Types → Native Controllers
| JS Layout Type | iOS Controller | Android Controller |
|---|---|---|
component | RNNComponentViewController | ComponentViewController |
stack | RNNStackController (UINavigationController) | StackController |
bottomTabs | RNNBottomTabsController (UITabBarController) | BottomTabsController |
sideMenu | RNNSideMenuViewController (MMDrawerController) | SideMenuController (DrawerLayout) |
topTabs | RNNTopTabsViewController | TopTabsController (ViewPager) |
splitView | RNNSplitViewController | N/A (iOS only) |
externalComponent | RNNExternalViewController | ExternalComponentViewController |
Options → Presenters
Each controller type has a Presenter that applies options to views:
| iOS Controller | iOS Presenter | Android Presenter |
|---|---|---|
RNNComponentViewController | RNNComponentPresenter | ComponentPresenter |
RNNStackController | RNNStackPresenter + TopBarPresenter | StackPresenter |
RNNBottomTabsController | RNNBottomTabsPresenter | BottomTabsPresenter |
RNNSideMenuViewController | RNNSideMenuPresenter | SideMenuPresenter |
Events (same names both platforms)
| Event | Trigger |
|---|---|
RNN.ComponentDidAppear | Screen becomes visible |
RNN.ComponentDidDisappear | Screen hidden |
RNN.NavigationButtonPressed | TopBar button tap |
RNN.BottomTabSelected | Tab changed |
RNN.ModalDismissed | Modal dismissed |
RNN.ScreenPopped | Screen popped from stack |
RNN.CommandCompleted | Any command finished |
Where to Find Things
By task: "I need to fix/change X"
| Task | JS File(s) | iOS File(s) | Android File(s) |
|---|---|---|---|
| Command execution | src/commands/Commands.ts | ios/RNNCommandsHandler.mm | react/NavigationTurboModule.kt |
| Layout creation | src/commands/LayoutTreeParser.ts | ios/RNNViewControllerFactory.mm | options/LayoutFactory.java |
| Options processing | src/commands/OptionsProcessor.ts | ios/RNNNavigationOptions.mm | options/Options.java |
| Options application | — | ios/*Presenter.mm | viewcontrollers/*Presenter.java |
| TopBar | src/interfaces/Options.ts (TopBarOptions) | ios/TopBarPresenter.mm, ios/RNNUIBarButtonItem.mm | views/stack/topbar/ |
| Bottom tabs | src/interfaces/Options.ts (BottomTabsOptions) | ios/RNNBottomTabsPresenter.mm | viewcontrollers/bottomtabs/ |
| Modals | src/commands/Commands.ts | ios/RNNModalManager.mm | viewcontrollers/modal/ModalStack.java |
| Overlays | src/commands/Commands.ts | ios/RNNOverlayManager.mm | viewcontrollers/overlay/OverlayManager.kt |
| Animations | src/interfaces/Options.ts (AnimationOptions) | ios/ScreenAnimationController.mm | viewcontrollers/stack/StackAnimator.kt |
| React view rendering | — | ios/RNNReactView.mm | react/ReactView.java |
| Events to JS | src/adapters/NativeEventsReceiver.ts | ios/RNNEventEmitter.mm | react/events/EventEmitter.java |
| Component registration | src/components/ComponentRegistry.ts | — | — |
| Deep linking (URL → screen) | src/linking/ (LinkingHandler, URLParser, RouteMatcher, DeferredLinkQueue, ModalLayoutBuilder) | ios/RNNAppDelegate.mm (dispatchDeepLinkURL:, cold-start queue, RCTContentDidAppearNotification) | NavigationActivity.onNewIntent → ReactGateway |
By directory
src/— JS public API, commands, processing pipeline. See src/ARCHITECTURE.mdios/— All Obj-C/C++ native code. See ios/ARCHITECTURE.mdios/TurboModules/— New architecture entry points (RNNTurboModule,RNNTurboManager,RNNTurboCommandsHandler)android/src/main/java/com/reactnativenavigation/— All Java/Kotlin native code. See android/ARCHITECTURE.mdplayground/— Demo app for development and E2E testsplayground/src/screens/— Test screens exercising every featureplayground/e2e/— Detox E2E tests
Options Resolution Order
Options are applied in ascending priority:
- Default options (from
Navigation.setDefaultOptions()) — lowest priority - Static options (from component class or
Navigation.registerComponent) - Options passed in the layout call (e.g.
push,setRoot) mergeOptions()— runtime override, highest priority
JS Processing Pipeline (exact order)
API layout → OptionsCrawler.crawl() → LayoutProcessor.process()
→ LayoutTreeParser.parse() → LayoutTreeCrawler.crawl()
→ OptionsProcessor (colors, assets, custom) → NativeCommandsSender
iOS Patterns
- All controllers conform to
RNNLayoutProtocol RNNBasePresentersubclasses apply options —applyOptionsOnInit:,applyOptions:,mergeOptions:resolvedOptions:- Commands run on main thread (
RCTExecuteOnMainQueue) - React views:
RNNReactViewwrapsRCTSurfaceHostingView(new arch) - Overlays use separate
UIWindowinstances (RNNOverlayWindow) RNNReactComponentRegistrycaches React component instances
Android Patterns
- View-based, NOT Fragment-based
- All commands dispatched via
UiThread.post() ViewController<T extends ViewGroup>is the base —createView()is abstractParentControllerextendsChildControllerextendsViewController- Bottom tabs use
AHBottomNavigationlibrary - Three root layouts in
NavigationActivity: rootLayout, modalsLayout, overlaysLayout - Tab attachment modes:
Together,OnSwitchToTab,AfterInitialTab
Development Workflow
Playground app
yarn start— Metro bundleryarn xcode— Open iOS projectyarn studio— Open Android projectyarn pod-install— Install iOS pods
Testing
yarn test-js— Jest unit testsyarn test-unit-ios— iOS native unit tests (XCTest)yarn test-unit-android— Android native unit tests (JUnit + Robolectric)yarn test-e2e-ios-ci/yarn test-e2e-android-ci— Detox E2E tests
Building
yarn prepare— Buildssrc/→lib/(ESM + types)- Codegen config:
rnnavigationinpackage.json
Common Gotchas
- iOS uses UIKit subclasses (UINavigationController, UITabBarController); Android uses custom View hierarchy
splitViewis iOS-only- Side menu: iOS uses MMDrawerController (3rd party); Android uses DrawerLayout (native)
- Options that exist in JS types may not be implemented on both platforms — check the presenter
passPropsare stored in JSStore, not sent to native (cleared before bridge crossing)- The
lib/folder is generated — never edit it, editsrc/instead - Deep links are processed only after the first
setRoot()resolves; pre-bridge URLs on iOS are queued natively inRNNAppDelegateand flushed onRCTContentDidAppearNotification(bridgeless mode —RCTJavaScriptDidLoadNotificationdoes NOT fire) ModalLayoutBuilderstrips React-reserved keys (ref,key) from URL query params before they reachpassProps, to avoid React 19 ref-validation crashes
Más skills de wix
wds-docs
wix
Referencia de componentes del sistema de diseño de Wix. Úsalo al construir interfaces de usuario con @wix/design-system, al elegir componentes o al verificar propiedades y ejemplos. Se activa con "qué...
official
wix-app
wix
Crear y revisar extensiones de aplicaciones de Wix CLI: páginas de panel, modales, complementos, complementos de menú, widgets de elementos personalizados, componentes de React para el Editor, complementos de sitio,…
official
wix-cli-app-validation
wix
Úsalo al probar la preparación de la aplicación, verificar el comportamiento en tiempo de ejecución o validar antes de lanzamientos y después de cambios en el código. Los desencadenantes incluyen validar, probar,…
official
wix-cli-backend-api
wix
Crea endpoints HTTP para aplicaciones de Wix CLI. Úsalo solo cuando el usuario solicite específicamente un endpoint de backend. Úsalo al construir endpoints de API REST, HTTP de backend…
official
wix-cli-backend-event
wix
Crear extensiones de eventos de backend que respondan a eventos de Wix. Úselo al implementar controladores que se ejecutan cuando ocurren condiciones específicas en un sitio. Los desencadenantes incluyen…
official
wix-cli-context-provider
wix
Crea extensiones de proveedor de contexto para aplicaciones de Wix CLI — componentes lógicos (sin interfaz de usuario) que exponen estado compartido, funciones y configuración al sitio hijo…
official
wix-cli-dashboard-menu-plugin
wix
DEBE usarse siempre que el usuario quiera agregar un elemento de menú, acción u opción seleccionable al menú de más acciones, menú de acciones masivas o… de una página existente del panel de control de Wix.
official
wix-cli-dashboard-modal
wix
Úsalo al agregar formularios emergentes, confirmaciones o vistas detalladas a los paneles de Wix; al crear componentes de diálogo reutilizables en las páginas del panel; al mostrar…
official