--- id: events title: Events sidebar_label: Events --- ## onAppLaunched Called once the app is launched. Used to set the initial layout of the Application - after that the app is ready for user interaction. ```js const appLaunchedListener = Navigation.events().registerAppLaunchedListener( () => {} ); ``` RNN automatically unsubscribes components when they unmount, therefore unsubscribing isn't actually mandatory if you subscribed in `componentDidMount`. But you can use the following method to unsubscribe manually: ```js appLaunchedListener.remove(); ``` ## componentDidAppear Called each time this component appears on the screen (attached to the view hierarchy). ```js class MyComponent extends Component { componentDidMount() { this.navigationEventListener = Navigation.events().bindComponent(this); } componentWillUnmount() { // Not mandatory if (this.navigationEventListener) { this.navigationEventListener.remove(); } } componentDidAppear() {} } ``` This event can be observed globally as well: ```js // Subscribe const screenEventListener = Navigation.events().registerComponentDidAppearListener(({ componentId, componentName, passProps }) => { }); ... // Unsubscribe screenEventListener.remove(); ``` | Parameter | Description | | :---------------: | :---------------------------------------------------------------------------------------- | | **componentId** | Id of the appearing component | | **componentName** | Registered name used when registering the component with `Navigation.registerComponent()` | | **passProps** | props passed to the component | ## componentDidDisappear Called each time this component disappears from the screen (detached from the view hierarchy). ```js class MyComponent extends Component { componentDidMount() { this.navigationEventListener = Navigation.events().bindComponent(this); } componentWillUnmount() { // Not mandatory if (this.navigationEventListener) { this.navigationEventListener.remove(); } } componentDidDisappear() {} } ``` This event can be observed globally as well: ```js // Subscribe const screenEventListener = Navigation.events().registerComponentDidDisappearListener(({ componentId, componentName }) => { }); ... // Unsubscribe screenEventListener.remove(); ``` | Parameter | Description | | :---------------: | :---------------------------------------------------------------------------------------- | | **componentId** | Id of the disappearing component | | **componentName** | Registered name used when registering the component with `Navigation.registerComponent()` | ## registerCommandListener The `commandListener` is called whenever a _Navigation command_ (i.e push, pop, showModal etc) is invoked. ```js // Subscribe const commandListener = Navigation.events().registerCommandListener((name, params) => { }); ... // Unsubscribe commandListener.remove(); ``` | Parameter | Description | | :--------: | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **name** | The name of the command that was invoked. For example `push` | | **params** | `commandId`: Each command is assigned a unique Id
`componentId`: Optional, the componentId passed to the command
`layout`: Optional, if the command invoked created a screen. Slim representation of the component and its options | ## registerCommandCompletedListener Invoked when a command finishes executing in native. If the command contains animations, for example pushed screen animation, the listener is invoked after the animation ends. ```js // Subscribe const commandCompletedListener = Navigation.events().registerCommandCompletedListener(({ commandId, completionTime, params }) => { }); ... // Unsubscribe commandCompletedListener.remove(); ``` | Parameter | Description | | :----------------: | :----------------------------------------------------------------- | | **commandId** | Id of the completed command | | **completionTime** | Timestamp when the command, and consecutive animations, completed. | ## registerModalDismissedListener Invoked when a modal is dismissed. ```js // Subscribe const modalDismissedListener = Navigation.events().registerModalDismissedListener(({ componentId, modalsDismissed }) => { }); ... // Unsubscribe modalDismissedListener.remove(); ``` ## registerModalAttemptedToDismissListener(iOS 13+ only) Invoked only on iOS pageSheet modal when `swipeToDismiss` flag is set to true and modal was swiped down to dismiss. ```js // Subscribe const modalAttemptedToDismissListener = Navigation.events().registerModalAttemptedToDismissListener(({ componentId }) => { }); ... // Unsubscribe modalDismissedListener.remove(); ``` | Parameter | Description | | :-------------: | :------------------------------- | | **componentId** | Id of the modal a user is attempting to dismiss | ## registerScreenPoppedListener Invoked when the screen is popped. ```js // Subscribe const screenPoppedListener = Navigation.events().registerScreenPoppedListener(({ componentId }) => { }); ... // Unsubscribe screenPoppedListener.remove(); ``` | Parameter | Description | | :-----------------: | :----------------------------------- | | **componentId** | Id of the modal | | **modalsDismissed** | Number of modals that were dismissed | ## registerBottomTabSelectedListener Invoked when BottomTab is selected by a user. ```js // Subscribe const bottomTabEventListener = Navigation.events().registerBottomTabSelectedListener(({ selectedTabIndex, unselectedTabIndex }) => { }); ... // Unsubscribe bottomTabEventListener.remove(); ``` ## registerBottomTabLongPressedListener Invoked when BottomTab is long pressed by a user. ```js // Subscribe const bottomTabEventListener = Navigation.events().registerBottomTabLongPressedListener(({ selectedTabIndex }) => { }); ... // Unsubscribe bottomTabEventListener.remove(); ``` | Parameter | Description | | :--------------------: | :------------------------------------| | **selectedTabIndex** | Index of the newly selected tab | | **unselectedTabIndex** | Index of the previously selected tab | ## navigationButtonPressed event This event is emitted whenever a TopBar button is pressed by a user. ```js class MyComponent extends Component { componentDidMount() { this.navigationEventListener = Navigation.events().bindComponent(this); } componentWillUnmount() { // Unregistering listeners bound to components isn't mandatory since RNN handles the unregistration for you if (this.navigationEventListener) { this.navigationEventListener.remove(); } } navigationButtonPressed({ buttonId }) {} } ``` This event can be observed globally as well: ```js // Subscribe const navigationButtonEventListener = Navigation.events().registerNavigationButtonPressedListener(({ buttonId }) => { }); ... // Unsubscribe navigationButtonEventListener.remove(); ``` | Parameter | Description | | :----------: | :------------------------------------- | | **buttonId** | `buttonId`: `id` of the pressed button | ## searchBarUpdated (iOS 11+ only) Called whenever the SearchBar of NavigationBar is updated. ```js class MyComponent extends Component { componentDidMount() { this.navigationEventListener = Navigation.events().bindComponent(this); } componentWillUnmount() { // Not mandatory if (this.navigationEventListener) { this.navigationEventListener.remove(); } } searchBarUpdated({ text, isFocused }) {} } ``` ## searchBarCancelPressed (iOS 11+ only) Called when the cancel button of the SearchBar from NavigationBar is pressed. ```js class MyComponent extends Component { componentDidMount() { this.navigationEventListener = Navigation.events().bindComponent(this); } componentWillUnmount() { // Not mandatory if (this.navigationEventListener) { this.navigationEventListener.remove(); } } searchBarCancelPressed() {} } ``` ## previewCompleted (iOS 11.4+ only) Called when preview peek is completed. ```js class MyComponent extends Component { componentDidMount() { this.navigationEventListener = Navigation.events().bindComponent(this); } componentWillUnmount() { // Not mandatory if (this.navigationEventListener) { this.navigationEventListener.remove(); } } previewCompleted({ previewComponentId }) {} } ```