rnn-codebase
oleh wix
Navigasi dan bekerja dengan basis kode react-native-navigation (RNN). Gunakan saat memperbaiki bug, menambahkan fitur, melacak alur perintah, memahami opsi…
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
Lebih banyak skill dari wix
wds-docs
wix
Referensi komponen Wix Design System. Gunakan saat membangun UI dengan @wix/design-system, memilih komponen, atau memeriksa props dan contoh. Dipicu oleh "apa…
official
wix-app
wix
Bangun dan tinjau ekstensi aplikasi CLI Wix — halaman dasbor, modal, plugin, plugin menu, widget elemen kustom, komponen React Editor, plugin situs,…
official
wix-cli-app-validation
wix
Gunakan saat menguji kesiapan aplikasi, memverifikasi perilaku runtime, atau memvalidasi sebelum rilis dan setelah perubahan dalam kode. Pemicu termasuk validasi, pengujian,…
official
wix-cli-backend-api
wix
Membuat titik akhir HTTP untuk aplikasi Wix CLI. Gunakan hanya saat pengguna secara spesifik meminta titik akhir backend. Gunakan saat membangun titik akhir REST API, HTTP backend…
official
wix-cli-backend-event
wix
Buat ekstensi event backend yang merespons event Wix. Gunakan saat mengimplementasikan handler yang berjalan ketika kondisi tertentu terjadi di situs. Pemicu meliputi…
official
wix-cli-context-provider
wix
Membuat ekstensi penyedia konteks untuk aplikasi Wix CLI — komponen logis (tanpa UI) yang mengekspos state, fungsi, dan konfigurasi bersama ke situs anak…
official
wix-cli-dashboard-menu-plugin
wix
WAJIB digunakan setiap kali pengguna ingin menambahkan item menu, tindakan, atau opsi yang dapat diklik ke menu tindakan lainnya, menu tindakan massal, atau… dari halaman dashboard Wix yang sudah ada.
official
wix-cli-dashboard-modal
wix
Gunakan saat menambahkan formulir popup, konfirmasi, atau tampilan detail ke dasbor Wix; membuat komponen dialog yang dapat digunakan kembali di seluruh halaman dasbor; menampilkan…
official