react-native-navigation-minimal-boilerplate icon indicating copy to clipboard operation
react-native-navigation-minimal-boilerplate copied to clipboard

Very minimal boilerplate setup for using wix/react-native-navigation

React Native Navigation Minimal Boilerplate

Hi, this repo contains the very minimal boilerplate for using Wix's react-native-navigation. The reason behind creating this repo was, while creating new react-native apps with react-native-navigation, I faced the issue of Hot Reloading was not working. But it was working on the example app that is on react-native-navigation repo.

I narrowed down the issue and it turns out that it's not an issue of react-native or react-native-navigation. It was how react-native-navigation requires us to import react modules as it doesn't follow the traditional AppRegistry way of binding react-native components with iOS.

In summary, we can't directly import any react components to index.android.js, index.ios.js or even root app.js file. On that case, hot-reload won't work. Root react components (like screens/views) need to be registered via registerScreens function in the following way:

import {Navigation} from 'react-native-navigation';

import Landing from './screens/Landing';
import Home from './screens/Home';

export function registerScreens() {
  Navigation.registerComponent('Landing', () => Landing);
  Navigation.registerComponent('Home', () => Home);
}

This registerScreens function need to be in a separate file than index files or root App.js file. Here, we are assuming that our index.android.js and index.ios.js files are as follows:

import App from './src/app';

Thats only it. Now from app.js file we call the registerScreen function:

import {Navigation} from 'react-native-navigation';
import {registerScreens} from './routes';

registerScreens();

Navigation.startSingleScreenApp({
  screen: {
    screen: 'Landing',
    title: 'Welcome'
  }
});

In this way, hot reloading should work like the example app.