---
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 }) {}
}
```