rnn-codebase
द्वारा wix
react-native-navigation (RNN) कोडबेस में नेविगेट करें और काम करें। बग फिक्स करने, सुविधाएँ जोड़ने, कमांड फ्लो ट्रेस करने, विकल्पों को समझने… के दौरान उपयोग करें।
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
wix की और Skills
wds-docs
wix
Wix डिज़ाइन सिस्टम घटक संदर्भ। @wix/design-system के साथ UI बनाते समय, घटक चुनते समय, या प्रॉप्स और उदाहरण जांचते समय उपयोग करें। "क्या…" पर ट्रिगर होता है।
official
wix-app
wix
Wix CLI ऐप एक्सटेंशन बनाएँ और समीक्षा करें — डैशबोर्ड पेज, मोडल, प्लगइन, मेनू प्लगइन, कस्टम एलिमेंट विजेट, एडिटर React कम्पोनेंट, साइट प्लगइन,…
official
wix-cli-app-validation
wix
ऐप तैयारी का परीक्षण करते समय, रनटाइम व्यवहार सत्यापित करते समय, या रिलीज़ से पहले और कोड में बदलावों के बाद मान्य करते समय उपयोग करें। ट्रिगर में शामिल हैं: मान्य करें, परीक्षण,…
official
wix-cli-backend-api
wix
Wix CLI ऐप्स के लिए HTTP एंडपॉइंट बनाता है। केवल तब उपयोग करें जब उपयोगकर्ता विशेष रूप से बैकएंड एंडपॉइंट के लिए पूछे। REST API एंडपॉइंट, बैकएंड HTTP बनाते समय उपयोग करें…
official
wix-cli-backend-event
wix
बैकएंड इवेंट एक्सटेंशन बनाएं जो Wix इवेंट्स पर प्रतिक्रिया देते हैं। उन हैंडलर्स को लागू करते समय उपयोग करें जो साइट पर विशिष्ट स्थितियाँ होने पर चलते हैं। ट्रिगर्स में शामिल हैं…
official
wix-cli-context-provider
wix
Wix CLI ऐप्स के लिए कॉन्टेक्स्ट प्रदाता एक्सटेंशन बनाता है — तार्किक घटक (बिना UI) जो चाइल्ड साइट को साझा स्थिति, फ़ंक्शन और कॉन्फ़िगरेशन प्रदान करते हैं…
official
wix-cli-dashboard-menu-plugin
wix
जब भी उपयोगकर्ता किसी मौजूदा Wix डैशबोर्ड पेज के अधिक कार्रवाई मेनू, बल्क कार्रवाई मेनू, या… में एक क्लिक करने योग्य मेनू आइटम, कार्रवाई, या विकल्प जोड़ना चाहे, तब इसका उपयोग करना अनिवार्य है।
official
wix-cli-dashboard-modal
wix
Wix डैशबोर्ड में पॉपअप फॉर्म, पुष्टिकरण या विस्तृत दृश्य जोड़ते समय उपयोग करें; डैशबोर्ड पृष्ठों पर पुन: प्रयोज्य डायलॉग घटक बनाने के लिए; दिखाने के लिए…
official