<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Vishal Singh</title>
    <description>The latest articles on DEV Community by Vishal Singh (@singhvishal802).</description>
    <link>https://dev.to/singhvishal802</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F670113%2F820bc570-9a27-46b6-b1f8-cd6519d8f43f.jpeg</url>
      <title>DEV Community: Vishal Singh</title>
      <link>https://dev.to/singhvishal802</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/singhvishal802"/>
    <language>en</language>
    <item>
      <title>Why Choose React Native Expo Over React Native CLI in 2025</title>
      <dc:creator>Vishal Singh</dc:creator>
      <pubDate>Sat, 26 Apr 2025 12:33:33 +0000</pubDate>
      <link>https://dev.to/singhvishal802/why-choose-react-native-expo-over-react-native-cli-in-2025-1087</link>
      <guid>https://dev.to/singhvishal802/why-choose-react-native-expo-over-react-native-cli-in-2025-1087</guid>
      <description>&lt;p&gt;If you're diving into mobile app development with React Native, one of the first decisions you'll face is whether to use &lt;strong&gt;Expo&lt;/strong&gt; or the &lt;strong&gt;React Native CLI&lt;/strong&gt;. While both options can help you build cross-platform mobile applications, they offer different development experiences and trade-offs.&lt;/p&gt;

&lt;p&gt;As someone who has worked with both approaches extensively, I'd like to share why Expo might be the better choice for many developers, especially those just starting with React Native.&lt;/p&gt;

&lt;h3&gt;
  
  
  What are Expo and React Native CLI?
&lt;/h3&gt;

&lt;p&gt;Before diving into the comparison, let's clarify what each option provides:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Expo&lt;/strong&gt; is a framework and platform built around React Native that provides a managed workflow with pre-configured tools and services to help you build, deploy, and iterate on iOS, Android, and web apps.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;React Native CLI&lt;/strong&gt; offers a bare-bones setup that gives you complete control over the native code but requires more manual configuration and native development knowledge.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why Choose Expo in 2025
&lt;/h3&gt;

&lt;h4&gt;
  
  
  1. Simplified Setup and Development
&lt;/h4&gt;

&lt;p&gt;Expo dramatically reduces the barrier to entry for React Native development. With Expo, you can start building your app with just a few commands:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install -g expo-cli
expo init MyNewApp
cd MyNewApp
expo start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No need to install Android Studio, Xcode, or deal with complex native build configurations right away. This means you can focus on writing JavaScript and building your app's functionality immediately.&lt;/p&gt;

&lt;h4&gt;
  
  
  2. Enhanced Development Experience
&lt;/h4&gt;

&lt;p&gt;Expo comes with several features that improve the development experience:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hot Reloading&lt;/strong&gt;: See changes instantly as you make them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Expo Go App&lt;/strong&gt;: Test your app on physical devices without building native binaries.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Expo DevTools&lt;/strong&gt;: A web-based interface for managing your development workflow.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;QR Code Sharing&lt;/strong&gt;: Share a link or QR code to let anyone with Expo Go try your app instantly.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  3. Comprehensive SDK Access
&lt;/h4&gt;

&lt;p&gt;Expo provides a comprehensive SDK that gives you access to device features and APIs without writing native code:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Camera and image picker&lt;/li&gt;
&lt;li&gt;Location services&lt;/li&gt;
&lt;li&gt;Push notifications&lt;/li&gt;
&lt;li&gt;Local authentication (fingerprint/face ID)&lt;/li&gt;
&lt;li&gt;Secure storage&lt;/li&gt;
&lt;li&gt;Sensors and device motion&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These APIs are maintained by the Expo team, ensuring compatibility across versions and platforms.&lt;/p&gt;

&lt;h4&gt;
  
  
  4. Easy Updates with EAS Update
&lt;/h4&gt;

&lt;p&gt;Expo Application Services (EAS) allows you to push updates directly to your users without going through the app store review process (for non-native code changes). This means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Faster bug fixes and feature deployments&lt;/li&gt;
&lt;li&gt;Lower risk when releasing updates&lt;/li&gt;
&lt;li&gt;Better user experience with seamless updates&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  5. Streamlined Production Builds with EAS Build
&lt;/h4&gt;

&lt;p&gt;Building and distributing mobile apps traditionally involves complex native build systems. Expo simplifies this with EAS Build:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cloud-based builds for iOS and Android&lt;/li&gt;
&lt;li&gt;No need for a Mac to build iOS apps&lt;/li&gt;
&lt;li&gt;Consistent build environments&lt;/li&gt;
&lt;li&gt;Automated submission to app stores&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  6. Expo Development Builds for Native Modules
&lt;/h4&gt;

&lt;p&gt;One of the historical limitations of Expo was the inability to add custom native code. The "ejecting" process to overcome this limitation was often painful. Now, with Expo Development Builds, you can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use custom native modules&lt;/li&gt;
&lt;li&gt;Maintain the Expo workflow&lt;/li&gt;
&lt;li&gt;Access native code when needed without "ejecting"&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  7. Growing Community and Ecosystem
&lt;/h4&gt;

&lt;p&gt;The Expo ecosystem continues to grow with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Extensive documentation&lt;/li&gt;
&lt;li&gt;Active community support&lt;/li&gt;
&lt;li&gt;Regular updates and improvements&lt;/li&gt;
&lt;li&gt;A wide range of compatible libraries&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  8. Scalability Concerns Addressed
&lt;/h4&gt;

&lt;p&gt;Earlier versions of Expo had limitations for large-scale production apps. Most of these concerns have been addressed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Support for custom native code&lt;/li&gt;
&lt;li&gt;Improved build configuration options&lt;/li&gt;
&lt;li&gt;Better performance optimization&lt;/li&gt;
&lt;li&gt;Enterprise-ready features&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  When to Consider React Native CLI Instead
&lt;/h3&gt;

&lt;p&gt;Despite Expo's advantages, there are situations where React Native CLI might be preferable:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;When you need deep integration with native modules not supported by Expo&lt;/li&gt;
&lt;li&gt;When you require fine-grained control over the native build process&lt;/li&gt;
&lt;li&gt;For apps with unique background processing requirements&lt;/li&gt;
&lt;li&gt;When working with specific hardware features not exposed by Expo SDK&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;In 2025, Expo has evolved to address many of its previous limitations while maintaining its developer-friendly approach. For most developers, particularly those new to mobile development or looking to move quickly, Expo provides the optimal balance of ease-of-use and flexibility.&lt;/p&gt;

&lt;p&gt;The ability to add native modules through development builds means you're no longer making a permanent decision that might limit your app later. You can start with Expo for its simplified workflow and still access native functionality when needed.&lt;/p&gt;

&lt;p&gt;React Native CLI remains an excellent option for developers who need complete control, but Expo has become sophisticated enough to handle most production app requirements while providing a significantly better development experience.&lt;/p&gt;

&lt;p&gt;What's your experience with Expo vs React Native CLI? I'd love to hear your thoughts in the comments!&lt;/p&gt;

&lt;p&gt;Happy Coding...🚀🚀&lt;/p&gt;

</description>
      <category>reactnative</category>
      <category>mobile</category>
      <category>productivity</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Storybook for React Native</title>
      <dc:creator>Vishal Singh</dc:creator>
      <pubDate>Tue, 24 Sep 2024 15:17:05 +0000</pubDate>
      <link>https://dev.to/singhvishal802/storybook-for-react-native-4oj8</link>
      <guid>https://dev.to/singhvishal802/storybook-for-react-native-4oj8</guid>
      <description>&lt;p&gt;Hello Experts, We all use Reusable Components in our applications OR we develop custom components that are frequently used at multiple places and keep that logic separate, so whenever we change on business logic it will be reflected everywhere where it is used. What happens if I say show me the component you developed, you need to import/implement it in one component and run the application, correct? Is there any way I can see all Reusable Components in one place, I can play with it, change various props and validate it? Yes it’s there.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is a Storybook?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Storybook&lt;/strong&gt; allows developers to write Story (Custom Component), Run Story, Play with various properties, Validate it without running actual application and without importing in any component. Storybook makes developer life more simple, developers can play with all Story (Custom Component) from one place — that’s called Storybook. Storybook integrates with most popular JavaScript UI frameworks like React, React Native, Angular, Vue and supports a server-rendered component framework such as Ruby on Rails.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is a Story?
&lt;/h2&gt;

&lt;p&gt;Story captures the rendered state of a UI Component. Developers can write multiple stories per component. Stories are written in Component Story Format (CSF) an ES6 module-based standard — for writing components.&lt;/p&gt;

&lt;h2&gt;
  
  
  Storybook Features —
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Isolated component development&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Deliver robust UIs&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Addons to power up your workflow&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Consistent user experience&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Unit test components&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Share &amp;amp; Reuse component&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Installations —
&lt;/h2&gt;

&lt;p&gt;Execute this command from within the root of your react native app:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npx -p @storybook/cli sb init — type react_native&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
You’ll be prompted asking if you want to install @storybook/react-native-server, you can safely choose not to install this now since you can add it later and it’s not required.&lt;/p&gt;
&lt;h2&gt;
  
  
  Run Storybook —
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Starts Storybook in development mode
npm run storybook
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  Writing Stories —
&lt;/h2&gt;

&lt;p&gt;Create Task Component&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// components/Task.js
import * as React from 'react';
import { TextInput, SafeAreaView } from 'react-native';
import { styles } from '../constants/globalStyles';

export default function Task({ task: { id, title, state }, onArchiveTask, onPinTask }) {
  return (
    &amp;lt;SafeAreaView style={styles.ListItem}&amp;gt;
      &amp;lt;TextInput value={title} editable={false} /&amp;gt;
    &amp;lt;/SafeAreaView&amp;gt;
  );
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create TaskStories&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
// components/Task.stories.js
import * as React from 'react';
import { View } from 'react-native';
import { styles } from '../constants/globalStyles';
import { storiesOf } from '@storybook/react-native';
import { action } from '@storybook/addon-actions';
import Task from './Task';
export const task = {
  id: '1',
  title: 'Test Task',
  state: 'TASK_INBOX',
  updatedAt: new Date(2018, 0, 1, 9, 0),
};

export const actions = {
  onPinTask: action('onPinTask'),
  onArchiveTask: action('onArchiveTask'),
};
storiesOf('Task', module)
  .addDecorator(story =&amp;gt; &amp;lt;View style={styles.TaskBox}&amp;gt;{story()}&amp;lt;/View&amp;gt;)
  .add('default', () =&amp;gt; &amp;lt;Task task={task} {...actions} /&amp;gt;)
  .add('pinned', () =&amp;gt; &amp;lt;Task task={{ ...task, state: 'TASK_PINNED' }} {...actions} /&amp;gt;)
  .add('archived', () =&amp;gt; &amp;lt;Task task={{ ...task, state: 'TASK_ARCHIVED' }}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Configuration&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// storybook/index.js
import { getStorybookUI, configure } from '@storybook/react-native';

import './rn-addons';

// import stories
configure(() =&amp;gt; {
  require('../components/Task.stories.js');
}, module);

const StorybookUIRoot = getStorybookUI({
  asyncStorage: null,
});

export default StorybookUIRoot;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Render All | Specific Stories&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { getStorybookUI, configure } from '@storybook/react-native';
import { name as appName } from './app.json';
import { AppRegistry } from 'react-native';

configure(() =&amp;gt; {
  require('./storybook/stories/Button/Button.stories.js'); // render all stories require(‘./storybook/stories’) - which contain all your stories
}, module);

const StorybookUIRoot = getStorybookUI({});

AppRegistry.registerComponent(appName, () =&amp;gt; StorybookUIRoot);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  AddOns —
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Knobs —&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;npm i — save @storybook/addon-ondevice-knobs&lt;br&gt;
&lt;/code&gt;Allow developers to adjust components props in real time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Actions —&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;npm i — save @storybook/addon-ondevice-actions&lt;br&gt;
&lt;/code&gt;Developer can verify onPress calls with actions that will log information in the actions tab.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Notes —&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;npm i — save @storybook/addon-ondevice-notes&lt;br&gt;
&lt;/code&gt;Allow developers to add some markdown to your stories to help document their usage.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Background —&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;npm i — save @storybook/addon-ondevice-backgrounds&lt;br&gt;
&lt;/code&gt;Allows developer to change the background of storybook to compare the look of your component against different backgrounds.&lt;/p&gt;

&lt;p&gt;Thanks for reading Article!&lt;/p&gt;

</description>
      <category>reactnative</category>
      <category>react</category>
      <category>javascript</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Implementing Deep Linking in a React Native Application</title>
      <dc:creator>Vishal Singh</dc:creator>
      <pubDate>Wed, 03 Apr 2024 05:48:14 +0000</pubDate>
      <link>https://dev.to/singhvishal802/implementing-deep-linking-in-a-react-native-application-43ap</link>
      <guid>https://dev.to/singhvishal802/implementing-deep-linking-in-a-react-native-application-43ap</guid>
      <description>&lt;p&gt;Deep linking is a way of allowing users to navigate directly to specific screens or content within an application. In this article, we’ll explore how to implement deep linking in a React Native application using the React Navigation library.&lt;/p&gt;

&lt;h3&gt;
  
  
  Prerequisites
&lt;/h3&gt;

&lt;p&gt;Before we get started, make sure you have the following installed on your machine:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Node.js and NPM or Yarn&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;React Native CLI&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A code editor of your choice&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Getting Started
&lt;/h3&gt;

&lt;p&gt;Let’s start by creating a new React Native project:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx react-native init DeepLinkProject
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Next, install the required dependencies for React Navigation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;yarn add @react-navigation/native
yarn add react-native-reanimated react-native-gesture-handler react-native-screens react-native-safe-area-context @react-native-community/masked-view
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We also need to install &lt;code&gt;react-navigation/stack&lt;/code&gt; which is the package we'll be using for navigation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;yarn add @react-navigation/stack
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Setting up Deep Linking with React Navigation
&lt;/h3&gt;

&lt;p&gt;To implement deep linking, we’ll use the &lt;code&gt;Linking&lt;/code&gt; API provided by React Native. We'll also use the &lt;code&gt;useEffect&lt;/code&gt; hook to handle deep links.&lt;/p&gt;

&lt;p&gt;Let’s start by setting up the Stack Navigator in our &lt;code&gt;App.tsx&lt;/code&gt; file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import * as React from 'react';
import { NavigationContainer } from '@react-navigation/native';
import { createStackNavigator } from '@react-navigation/stack';
import { Text, View } from 'react-native';

const Stack = createStackNavigator();

function HomeScreen() {
  return (
    &amp;lt;View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}&amp;gt;
      &amp;lt;Text&amp;gt;Home Screen&amp;lt;/Text&amp;gt;
    &amp;lt;/View&amp;gt;
  );
}

function ProfileScreen() {
  return (
    &amp;lt;View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}&amp;gt;
      &amp;lt;Text&amp;gt;Profile Screen&amp;lt;/Text&amp;gt;
    &amp;lt;/View&amp;gt;
  );
}

export default function App() {
  return (
    &amp;lt;NavigationContainer&amp;gt;
      &amp;lt;Stack.Navigator&amp;gt;
        &amp;lt;Stack.Screen name="Home" component={HomeScreen} /&amp;gt;
        &amp;lt;Stack.Screen name="Profile" component={ProfileScreen} /&amp;gt;
      &amp;lt;/Stack.Navigator&amp;gt;
    &amp;lt;/NavigationContainer&amp;gt;
  );
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We’ve created two screens: &lt;code&gt;HomeScreen&lt;/code&gt; and &lt;code&gt;ProfileScreen&lt;/code&gt;. Now, let's add deep linking to these screens.&lt;/p&gt;

&lt;p&gt;We’ll first create a &lt;code&gt;useEffect&lt;/code&gt; hook in the &lt;code&gt;App&lt;/code&gt; component to handle deep links. Here, we'll add an event listener to &lt;code&gt;Linking&lt;/code&gt; that will parse the incoming URL and navigate to the corresponding screen:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import * as React from 'react';
import { Linking } from 'react-native';
import { NavigationContainer } from '@react-navigation/native';
import { createStackNavigator } from '@react-navigation/stack';
import { Text, View } from 'react-native';

const Stack = createStackNavigator();

function HomeScreen() {
  return (
    &amp;lt;View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}&amp;gt;
      &amp;lt;Text&amp;gt;Home Screen&amp;lt;/Text&amp;gt;
    &amp;lt;/View&amp;gt;
  );
}

function ProfileScreen() {
  return (
    &amp;lt;View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}&amp;gt;
      &amp;lt;Text&amp;gt;Profile Screen&amp;lt;/Text&amp;gt;
    &amp;lt;/View&amp;gt;
  );
}

export default function App() {
  React.useEffect(() =&amp;gt; {
    const handleDeepLink = ({ url }: { url: string }) =&amp;gt; {
      const route = url.replace(/.*?:\/\//g, '');
      const routeName = route.split('/')[0];

      if (routeName === 'profile') {
        const username = route.split('/')[1];
        navigation.navigate('Profile', { username });
      }
    };

    Linking.addEventListener('url', handleDeepLink);

    return () =&amp;gt; {
      Linking.removeEventListener('url', handleDeepLink);
    };
  }, []);

  return (
    &amp;lt;NavigationContainer&amp;gt;
      &amp;lt;Stack.Navigator&amp;gt;
        &amp;lt;Stack.Screen name="Home" component={HomeScreen} /&amp;gt;
        &amp;lt;Stack.Screen
          name="Profile"
          component={ProfileScreen}
          options={({ route }) =&amp;gt; ({ title: route.params.username })}
        /&amp;gt;
      &amp;lt;/Stack.Navigator&amp;gt;
    &amp;lt;/NavigationContainer&amp;gt;
  );
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the &lt;code&gt;useEffect&lt;/code&gt; hook, we first define a function &lt;code&gt;handleDeepLink&lt;/code&gt; that will handle the incoming deep link. We extract the route name and any parameters from the URL, and navigate to the corresponding screen using &lt;code&gt;navigation.navigate&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;In the &lt;code&gt;ProfileScreen&lt;/code&gt;, we can then access the &lt;code&gt;username&lt;/code&gt; parameter using &lt;code&gt;route.params.username&lt;/code&gt;, and set it as the screen's title using the &lt;code&gt;options&lt;/code&gt; prop.&lt;/p&gt;

&lt;h3&gt;
  
  
  Folder Structure
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;MyProject/&lt;br&gt;
├─ __tests__/&lt;br&gt;
├─ android/&lt;br&gt;
├─ ios/&lt;br&gt;
├─ src/&lt;br&gt;
│  ├─ screens/&lt;br&gt;
│  │  ├─ HomeScreen.tsx&lt;br&gt;
│  │  ├─ ProfileScreen.tsx&lt;br&gt;
│  ├─ App.tsx&lt;br&gt;
├─ package.json&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;We’ll keep our React Navigation stack in the &lt;code&gt;App.tsx&lt;/code&gt; file, and create separate files for each screen in the &lt;code&gt;screens&lt;/code&gt; folder.&lt;/p&gt;

&lt;h3&gt;
  
  
  Full Code
&lt;/h3&gt;

&lt;p&gt;Here is the full code for the application:&lt;/p&gt;

&lt;h3&gt;
  
  
  App.tsx
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import * as React from 'react';
import { Linking } from 'react-native';
import { NavigationContainer } from '@react-navigation/native';
import { createStackNavigator } from '@react-navigation/stack';
import { Text, View } from 'react-native';

import HomeScreen from './screens/HomeScreen';
import ProfileScreen from './screens/ProfileScreen';

const Stack = createStackNavigator();

export default function App() {
  React.useEffect(() =&amp;gt; {
    const handleDeepLink = ({ url }: { url: string }) =&amp;gt; {
      const route = url.replace(/.*?:\/\//g, '');
      const routeName = route.split('/')[0];

      if (routeName === 'profile') {
        const username = route.split('/')[1];
        navigation.navigate('Profile', { username });
      }
    };

    Linking.addEventListener('url', handleDeepLink);

    return () =&amp;gt; {
      Linking.removeEventListener('url', handleDeepLink);
    };
  }, []);

  return (
    &amp;lt;NavigationContainer&amp;gt;
      &amp;lt;Stack.Navigator&amp;gt;
        &amp;lt;Stack.Screen name="Home" component={HomeScreen} /&amp;gt;
        &amp;lt;Stack.Screen
          name="Profile"
          component={ProfileScreen}
          options={({ route }) =&amp;gt; ({ title: route.params.username })}
        /&amp;gt;
      &amp;lt;/Stack.Navigator&amp;gt;
    &amp;lt;/NavigationContainer&amp;gt;
  );
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  screens/HomeScreen.tsx
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import * as React from 'react';
import { View, Text, Button } from 'react-native';

interface Props {
  navigation: any;
}

export default function HomeScreen({ navigation }: Props) {
  return (
    &amp;lt;View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}&amp;gt;
      &amp;lt;Text&amp;gt;Home Screen&amp;lt;/Text&amp;gt;
      &amp;lt;Button
        title="Go to Profile"
        onPress={() =&amp;gt; navigation.navigate('Profile', { username: 'johndoe' })}
      /&amp;gt;
    &amp;lt;/View&amp;gt;
  );
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  screens/ProfileScreen.tsx
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import * as React from 'react';
import { View, Text } from 'react-native';

interface Props {
  route: any;
}

export default function ProfileScreen({ route }: Props) {
  return (
    &amp;lt;View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}&amp;gt;
      &amp;lt;Text&amp;gt;Profile Screen&amp;lt;/Text&amp;gt;
      &amp;lt;Text&amp;gt;{route.params.username}&amp;lt;/Text&amp;gt;
    &amp;lt;/View&amp;gt;
  );
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;In this article, we’ve explored how to implement deep linking in a React Native application using the React Navigation library. We’ve also covered considerations for different platforms and versions and provided code samples in TypeScript.&lt;/p&gt;

&lt;p&gt;If you like the article, please give it a like, Thanks 🙏🏽&lt;br&gt;
Happy Coding! 🚀&lt;/p&gt;

</description>
      <category>reactnative</category>
      <category>javascript</category>
      <category>mobile</category>
      <category>developer</category>
    </item>
    <item>
      <title>Managing Dates, Times and Time Zone Using Moment.js</title>
      <dc:creator>Vishal Singh</dc:creator>
      <pubDate>Fri, 05 May 2023 06:07:47 +0000</pubDate>
      <link>https://dev.to/singhvishal802/managing-dates-times-and-time-zone-using-momentjs-1h3b</link>
      <guid>https://dev.to/singhvishal802/managing-dates-times-and-time-zone-using-momentjs-1h3b</guid>
      <description>&lt;p&gt;Working with dates and times in JavaScript has always been a bit complex. That’s why if you ask a date-related question on StackOverflow, you’ll often hear the reply “&lt;strong&gt;Use Moment.js&lt;/strong&gt;”.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Is Moment.js?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Moment.js&lt;/strong&gt; is big open source community working with dates and times in JavaScript. It allows you to parse, validate, manipulate, and display dates and times using a clean and concise API.&lt;/p&gt;

&lt;p&gt;In this blog I’ll show you how to get up and running with Moment.js, as well as demonstrate several of its common use cases.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Started with Moment.js
&lt;/h2&gt;

&lt;p&gt;Moment.js can be run from the browser as well as from within a Node application. In order to use it with Node, install the module using the anyone following command.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install moment

yarn add moment
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then, simply &lt;code&gt;require() or import&lt;/code&gt; and use it in your application as shown below.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const moment = require('moment') or import moment from 'moment';
const today = moment();
console.log(today.format());

// 2023-05-05T10:55:16+05:30
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Date Formatting
&lt;/h2&gt;

&lt;p&gt;Moment.js has simplified the process of date conversion to any particular format. Date format conversion with Moment is simple, as shown in the following example.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;moment().format('MMMM Do YYYY, h:mm:ss a'); // May 5th 2023, 11:04:44 am
moment().format('dddd');                    // Friday
moment().format("MMM Do YY");               // May 5th 23
moment().format('YYYY [escaped] YYYY');     // 2023 escaped 2023
moment().format();   // 2023-05-05T10:55:16+05:30                     
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Manipulating Dates
&lt;/h2&gt;

&lt;p&gt;There are a number of options for manipulating the &lt;code&gt;moment&lt;/code&gt; object. For example, you can add or subtract days, months, years, etc. This is achieved via the &lt;code&gt;add()&lt;/code&gt; and &lt;code&gt;subtract()&lt;/code&gt; methods. The following example shows how seven days, months, or weeks are added to the current date.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;moment().add(7, 'days');    // adds 7 days to current date
moment().add(7, 'months');  // adds 7 months to current date
moment().add(7, 'years');   // adds 7 years to current date
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Similarly, the &lt;code&gt;subtract()&lt;/code&gt; method is shown below.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;moment().subtract(7, 'days');   // subtracts 7 days to current date
moment().subtract(7, 'months'); // subtracts 7 months to current date
moment().subtract(7, 'years');  // subtracts 7 years to current date
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Note that each of the above examples will return the &lt;code&gt;moment&lt;/code&gt; object. If you want a human-readable date, you’ll need to format it accordingly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Time From Now
&lt;/h2&gt;

&lt;p&gt;Another common task is determining how much time exists between two dates. For calculating time from the current date, Moment.js uses a method named &lt;code&gt;fromNow()&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;moment('2023.05.03', 'YYYY.MM.DD').fromNow() // 2 days ago
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If we pass in &lt;code&gt;true&lt;/code&gt; as an argument, we can get the value without the suffix.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;moment('2023.05.03', 'YYYY.MM.DD').fromNow(true) // 2 days 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  International Language Support
&lt;/h2&gt;

&lt;p&gt;Moment.js offers great &lt;code&gt;i18n support&lt;/code&gt;. It allows you to assign a &lt;code&gt;global language&lt;/code&gt; or set the language for a particular moment object. By default, it supports the English language. If you want to support any other language, then assign the key values of that particular language to &lt;code&gt;moment.locale&lt;/code&gt;. The following abridged example, taken from the Moment.js docs, shows how support can be added for French.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import moment from 'moment';

moment.locale('fr', {
  months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),
  weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
  relativeTime : {
      future : 'dans %s',
      past : 'il y a %s',
      s : 'quelques secondes',
      m : 'une minute',
      mm : '%d minutes',
      h : 'une heure',
      hh : '%d heures',
      d : 'un jour',
      dd : '%d jours',
      M : 'un mois',
      MM : '%d mois',
      y : 'un an',
      yy : '%d ans'
  }
});

moment.locale('fr');

moment(1316116057189).fromNow(); // il y a une heure
moment.locale('en');
moment(1316116057189).fromNow(); // an hour ago
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Moment Timezone
&lt;/h2&gt;

&lt;p&gt;Moment-Timezone is an add-on for Moment.js. It can parse and display dates in any timezone. In order to use it, install the module using the anyone following command.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install moment-timezone --save   # npm
yarn add moment-timezone             # Yarn
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Format Dates in Any Timezone
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;var jun = moment("2014-06-01T12:00:00Z");
var dec = moment("2014-12-01T12:00:00Z");

jun.tz('America/Los_Angeles').format('ha z');  // 5am PDT
dec.tz('America/Los_Angeles').format('ha z');  // 4am PST

jun.tz('America/New_York').format('ha z');     // 8am EDT
dec.tz('America/New_York').format('ha z');     // 7am EST

jun.tz('Asia/Tokyo').format('ha z');           // 9pm JST
dec.tz('Asia/Tokyo').format('ha z');           // 9pm JST

jun.tz('Australia/Sydney').format('ha z');     // 10pm EST
dec.tz('Australia/Sydney').format('ha z');     // 11pm EST
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Convert Dates Between Timezones
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;var newYork    = moment.tz("2014-06-01 12:00", "America/New_York");
var losAngeles = newYork.clone().tz("America/Los_Angeles");
var london     = newYork.clone().tz("Europe/London");

newYork.format();    // 2014-06-01T12:00:00-04:00
losAngeles.format(); // 2014-06-01T09:00:00-07:00
london.format();     // 2014-06-01T17:00:00+01:00
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Moment.js is really an awesome library that simplifies date and time-related manipulations and validations. In this article, we focused on some of the features of Moment.js which help in parsing, validating, and manipulating dates and times in the browser and Node.js applications. A number of useful plugins are also available for Moment.js. For more on Moment.js, the reader is directed to the library’s &lt;a href="https://momentjs.com/" rel="noopener noreferrer"&gt;documentation.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thanks for reading this post, I hope you found it interesting!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>react</category>
      <category>development</category>
    </item>
    <item>
      <title>Reactotron- Debugging tool for React Native and React Project</title>
      <dc:creator>Vishal Singh</dc:creator>
      <pubDate>Fri, 31 Mar 2023 05:48:57 +0000</pubDate>
      <link>https://dev.to/singhvishal802/reactotron-debugging-tool-for-react-native-and-react-project-33ic</link>
      <guid>https://dev.to/singhvishal802/reactotron-debugging-tool-for-react-native-and-react-project-33ic</guid>
      <description>&lt;p&gt;Reactotron - A Desktop App for inspecting your ReactJs and React Native projects. It's available for macOS, Windows, and Linux platforms. So you don't have to open any Web browser to see any console log or API response.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Use it to:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;view your application state.&lt;/li&gt;
&lt;li&gt;show API requests &amp;amp; responses.&lt;/li&gt;
&lt;li&gt;perform quick performance benchmarks.&lt;/li&gt;
&lt;li&gt;subscribe to parts of your application state.&lt;/li&gt;
&lt;li&gt;display messages similar to console.log.&lt;/li&gt;
&lt;li&gt;track your sagas.&lt;/li&gt;
&lt;li&gt;track your Async Storage in React Native.&lt;/li&gt;
&lt;li&gt;dispatch actions like a government-run mind control experiment.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2. Installing the Application
&lt;/h2&gt;

&lt;p&gt;You can install it from the attached link according to your platform. Once you have the application installed it should download and alert you that a new version is available and that new version should be installed on next launch.&lt;br&gt;
&lt;a href="https://github.com/infinitered/reactotron/releases/tag/v2.17.1" rel="noopener noreferrer"&gt;https://github.com/infinitered/reactotron/releases/tag/v2.17.1&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  3. Configure Reactotron with your project.
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;For React Native Project&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let's install Reactotron on your project as a dev dependency using below command.&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm i --save-dev reactotron-react-native&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create ReactotronConfig.js file.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Create ReactotronConfig.js file in your root folder of your project and copy the below code in it for initializing.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import Reactotron from 'reactotron-react-native'

Reactotron
  .setAsyncStorageHandler(AsyncStorage) // AsyncStorage would either come from 'react-native' or '@react-native-community/async-storage' depending on where you get it from
  .configure() // controls connection &amp;amp; communication settings
  .useReactNative() // add all built-in react native plugins
  .connect() // let's connect!

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Finally, we import this on startup in App.js or index.js of your project.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;if(__DEV__) {
  import('./ReactotronConfig').then(() =&amp;gt; console.log('Reactotron Configured'))
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;At this point, Reactotron is hooked up.&lt;/p&gt;

&lt;p&gt;Refresh your app and have a look at Reactotorn now.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;For ReactJs Project&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let's install Reactotron as a dev dependency.&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm i --save-dev reactotron-react-js&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;Create separate file for initializing src/ReactotronConfig.js in your editor of choice and paste this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import Reactotron from 'reactotron-react-js'

Reactotron
  .configure() // we can use plugins here -- more on this later
  .connect() // let's connect!

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Finally, we import this on startup in src/index.js on line 1:&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;import './ReactotronConfig'&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;At this point, Reactotron is hooked up.&lt;/p&gt;

&lt;p&gt;Refresh your web page (or start it up npm start) and have a look at Reactotron now.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Configure Console.log
&lt;/h2&gt;

&lt;p&gt;To see console.log, we have to configure ReactotronConfig.js additionally.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
import Reactotron from 'reactotron-react-native';
import AsyncStorage from '@react-native-async-storage/async-storage';

Reactotron.configure({name: 'app_name'})
  .setAsyncStorageHandler(AsyncStorage)
  .useReactNative()
  .connect();

//  patch console.log to send log to Reactotron
const yeOldeConsoleLog = console.log;
console.log = (...args) =&amp;gt; {
  yeOldeConsoleLog(...args);
  Reactotron.display({
    name: 'CONSOLE.LOG',
    value: args,
    preview: args.length &amp;gt; 0 &amp;amp;&amp;amp; typeof args[0] === 'string' ? args[0] : null,
  });
};

export default Reactotron;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Summary
&lt;/h1&gt;

&lt;p&gt;Effortlessly inspect React JS and React Native mobile apps with Reactotron, a free desktop application by Infinite Red.&lt;br&gt;
Majorly, It is used for Realtime Event Timeline, to see Application state, console logs messages, API Requests/Responses and Track Global Errors. &lt;/p&gt;

&lt;p&gt;You can also configure your Reactotron with redux for tracking global errors, and watching network requests.&lt;/p&gt;

&lt;p&gt;Use this link to configure Reactotron with redux &lt;a href="https://github.com/infinitered/reactotron/blob/master/docs/plugin-redux.md" rel="noopener noreferrer"&gt;https://github.com/infinitered/reactotron/blob/master/docs/plugin-redux.md&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I hope this article has helped in knowing Reactotron and its setup in ReactJs and React Native. Thanks for reading the article.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>reactnative</category>
      <category>webdev</category>
      <category>react</category>
    </item>
    <item>
      <title>Migrate Expo Project to React Native CLI</title>
      <dc:creator>Vishal Singh</dc:creator>
      <pubDate>Mon, 27 Sep 2021 05:05:00 +0000</pubDate>
      <link>https://dev.to/singhvishal802/migrate-expo-project-to-react-native-cli-190m</link>
      <guid>https://dev.to/singhvishal802/migrate-expo-project-to-react-native-cli-190m</guid>
      <description>&lt;p&gt;Hi everyone , I hope everyone is doing good.&lt;br&gt;
So generally when developers start learning React native, they choose Expo over RN CLI which is good but Expo has some limitations. Please use this link to know more about that &lt;a href="https://docs.expo.dev/introduction/why-not-expo/" rel="noopener noreferrer"&gt;https://docs.expo.dev/introduction/why-not-expo/&lt;/a&gt; .&lt;/p&gt;

&lt;p&gt;Here we learn how to convert our &lt;strong&gt;Expo&lt;/strong&gt; project to &lt;strong&gt;RN CLI&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  It's time to eject
&lt;/h2&gt;

&lt;p&gt;Basically, for migration we use &lt;strong&gt;EJECT&lt;/strong&gt; methodology to convert our Project to RN CLI.&lt;/p&gt;

&lt;p&gt;We use &lt;strong&gt;expo eject&lt;/strong&gt; command in terminal of our project directory. &lt;/p&gt;

&lt;p&gt;After that it's asking about &lt;strong&gt;packages&lt;/strong&gt; name for android and &lt;strong&gt;iOS identifier&lt;/strong&gt; for iOS.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;IMPORTANT!&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Use the correct package name and iOS identifier as same as mention in your project.&lt;/p&gt;

&lt;p&gt;After successfully completion, we get two new folder in our project.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;android - contains files which are responsible for native android development&lt;/li&gt;
&lt;li&gt;ios - contains files for which are responsible for native iOS development.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;After that, you can configure App icon and Splash screen image in each environment i.e android and iOS.&lt;/p&gt;

&lt;p&gt;And here we go, we successfully migrate our app from expo to RN CLI.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Happy Coding!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>reactnative</category>
      <category>javascript</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
