<?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>Forem: Rishikesh Vedpathak</title>
    <description>The latest articles on Forem by Rishikesh Vedpathak (@rishikeshvedpathak).</description>
    <link>https://forem.com/rishikeshvedpathak</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%2F307652%2F17b87a1f-ae11-4742-b1e7-7e17d93a922e.jpg</url>
      <title>Forem: Rishikesh Vedpathak</title>
      <link>https://forem.com/rishikeshvedpathak</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/rishikeshvedpathak"/>
    <language>en</language>
    <item>
      <title>Turborepo: A better way to implement a mono-repo architecture</title>
      <dc:creator>Rishikesh Vedpathak</dc:creator>
      <pubDate>Sun, 02 Apr 2023 10:30:46 +0000</pubDate>
      <link>https://forem.com/rishikeshvedpathak/turborepo-a-better-way-to-implement-a-mono-repo-architecture-5a46</link>
      <guid>https://forem.com/rishikeshvedpathak/turborepo-a-better-way-to-implement-a-mono-repo-architecture-5a46</guid>
      <description>&lt;p&gt;As modern software development teams grow and projects become more complex, managing dependencies and maintaining consistency between multiple projects can become a challenge. One way to tackle this problem is by using a monorepo, which is a repository that contains multiple packages, each with its own versioning and dependency management.&lt;br&gt;
However, setting up a monorepo can be a daunting task, especially when it comes to managing the build and deployment process. This is where &lt;a href="https://turbo.build/repo" rel="noopener noreferrer"&gt;Turborepo &lt;/a&gt;comes in, providing a simple and efficient solution for managing a React monorepo.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Turborepo is an open-source tool that simplifies the creation and management of monorepos, specifically for React projects. It uses Yarn workspaces to manage dependencies and allows for easy sharing of code between projects. Turborepo also provides a number of useful scripts for building, testing, and deploying projects within the monorepo.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Benefits of using Turborepo
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Simplified setup&lt;/strong&gt;: Turborepo automates the setup process for creating a monorepo, saving time and effort.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Consistent dependencies&lt;/strong&gt;: Yarn workspaces ensure that all projects within the monorepo use the same dependencies, reducing the risk of conflicts and errors.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Easy sharing of code&lt;/strong&gt;: Projects within the monorepo can easily share code, reducing code duplication and improving maintainability.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Streamlined testing and deployment&lt;/strong&gt;: Turborepo provides scripts for building, testing, and deploying projects within the monorepo, making these processes simpler and more efficient.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Creating a React Monorepo with Turborepo
&lt;/h3&gt;

&lt;p&gt;To create a React monorepo using Turborepo, follow these steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;To create a new monorepo, use our &lt;a href="https://www.npmjs.com/package/create-turbo" rel="noopener noreferrer"&gt;create-turbo&lt;/a&gt; npm package&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

npx create-turbo@latest
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    This installs the `create-turbo` CLI, and runs it followed by 
    several questions. Choose appropriate answers and proceed.

2. After completion of the above step, `create-turbo` creates a bunch of files inside the directory that you just have created.
`create-turbo` gave you a description of all of the things it was adding.
![create-turbo](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/au5b1950cnzrhundz60o.png)

3. Each of these is a workspace - a folder containing a `package.json`. Each workspace can declare its own dependencies, run its own scripts, and export code for other workspaces to use.

4. Add a new React project: To add a new React project to the monorepo, navigate to the apps directory and run the command
    ```


    npm create vite@latest


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

&lt;/div&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;This will create a new directory with a basic React project set up using [vite](https://vitejs.dev/guide/).
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Manage dependencies: To manage dependencies for the project, navigate to the project directory and run &lt;code&gt;npm i &amp;lt;dependency-name&amp;gt;&lt;/code&gt;. This will add the dependency to the project's &lt;code&gt;package.json&lt;/code&gt; file and to the root package-lock.json file.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Build, test, and deploy: Use the various scripts provided by Turborepo to build, test, and deploy projects within the monorepo.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Overall process:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffywzd6orwevc0za6jay9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffywzd6orwevc0za6jay9.png" alt="Turborepo overall process"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Using a monorepo for managing multiple projects can be complex, but &lt;a href="https://turbo.build/repo" rel="noopener noreferrer"&gt;Turborepo&lt;/a&gt; simplifies the process for React projects. By automating setup, managing dependencies with Yarn workspaces, and providing scripts for building, testing, and deploying projects, Turborepo makes it easier to manage a React monorepo.&lt;/p&gt;

&lt;h3&gt;
  
  
  And more...
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Check &lt;a href="https://hybrowlabs.com/react-js-dev-outsourcing" rel="noopener noreferrer"&gt;Hybrowlabs&lt;/a&gt; for React app development services.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>react</category>
      <category>javascript</category>
      <category>turborepo</category>
      <category>monorepo</category>
    </item>
    <item>
      <title>SVGR for your React app</title>
      <dc:creator>Rishikesh Vedpathak</dc:creator>
      <pubDate>Sun, 12 Mar 2023 22:06:48 +0000</pubDate>
      <link>https://forem.com/rishikeshvedpathak/svgr-for-your-react-app-d4g</link>
      <guid>https://forem.com/rishikeshvedpathak/svgr-for-your-react-app-d4g</guid>
      <description>&lt;p&gt;Most of the time, developers tend to add svg images to an assets directory and import them either directly or as a React component. This process not only increases your app bundle size but also makes managing all the assets difficult.&lt;br&gt;
What if there was a way to manage all the application icons like the way we import them from any other icon library?&lt;br&gt;
Yes, &lt;a href="https://react-svgr.com/" rel="noopener noreferrer"&gt;react-svgr&lt;/a&gt; helps you manage all the icons in your React application.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is SVGR?
&lt;/h2&gt;

&lt;p&gt;SVGR is an universal tool to transform SVG into React components.&lt;br&gt;
SVGR takes a raw SVG and transforms it into a ready-to-use React component.&lt;/p&gt;

&lt;p&gt;Example,&lt;br&gt;
Raw svg icon,&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fht5omtephjpl1zju8r3s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fht5omtephjpl1zju8r3s.png" alt="Raw svg icon"&gt;&lt;/a&gt;&lt;br&gt;
After running SVGR, we get the below react component,&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8jpu3tup6tgbbrwjw9ez.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8jpu3tup6tgbbrwjw9ez.png" alt="SVGR react component"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How to use SVGR?
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;SVGR playground&lt;br&gt;
&lt;a href="https://react-svgr.com/playground/" rel="noopener noreferrer"&gt;SVGR playground&lt;/a&gt; will help us transform our svg image into a react component online. Then we can copy-paste this component into our react application for further use.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqnf3ha8go1kvnfvgxp7o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqnf3ha8go1kvnfvgxp7o.png" alt="SVGR Playground"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;SVGR cli&lt;br&gt;
SVGR playground is useful only if we have few icons for transformation. But with &lt;a href="https://react-svgr.com/docs/cli/" rel="noopener noreferrer"&gt;SVGR cli&lt;/a&gt; we can transform a single file or a whole directory.&lt;br&gt;
can install &lt;code&gt;@svgr/cli&lt;/code&gt; locally in our project:&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

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

npm install --save-dev @svgr/cli
# or use yarn
yarn add --dev @svgr/cli


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

&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;Transforms a single file by specifying file as the single argument.&lt;/li&gt;
&lt;/ul&gt;

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

npx @svgr/cli -- assets/icons/menu-icon.svg


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

&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;Transform a whole directory
Transforms a whole directory using &lt;code&gt;--out-dir&lt;/code&gt; option. All SVG presents in this directory tree are transformed into React components.&lt;/li&gt;
&lt;/ul&gt;


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

&lt;p&gt;npx @svgr/cli --out-dir dist -- icons&lt;/p&gt;

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

&lt;/div&gt;
&lt;h2&gt;
&lt;br&gt;
  &lt;br&gt;
  &lt;br&gt;
  Write a script for batch transformation&lt;br&gt;
&lt;/h2&gt;

&lt;p&gt;With the help of &lt;code&gt;@svgr/cli&lt;/code&gt; we can simple write a script which can further simply this process.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Write new script into &lt;code&gt;package.json&lt;/code&gt;,
&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsh5xpjpx12vxe0aiafod.png" alt="svgr cli script"&gt;
&lt;/li&gt;
&lt;li&gt;Create &lt;code&gt;svgr.config.js&lt;/code&gt; file on root lever with below config,
&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbtl0ag1p7412l3ynu2qe.png" alt="svgr config"&gt;
&lt;/li&gt;
&lt;li&gt;Now we are good to execute below npm command to transform all our svg icons into react components.&lt;/li&gt;
&lt;/ol&gt;


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

&lt;p&gt;npm run icon:create&lt;/p&gt;

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

&lt;/div&gt;
&lt;h3&gt;
&lt;br&gt;
  &lt;br&gt;
  &lt;br&gt;
  And more...&lt;br&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Check &lt;a href="https://hybrowlabs.com/react-js-dev-outsourcing" rel="noopener noreferrer"&gt;Hybrowlabs&lt;/a&gt; for React app development services.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>react</category>
      <category>webdev</category>
      <category>svgr</category>
      <category>javascript</category>
    </item>
    <item>
      <title>What’s new in React 18?</title>
      <dc:creator>Rishikesh Vedpathak</dc:creator>
      <pubDate>Wed, 13 Apr 2022 09:00:57 +0000</pubDate>
      <link>https://forem.com/rishikeshvedpathak/whats-new-in-react-18-5np</link>
      <guid>https://forem.com/rishikeshvedpathak/whats-new-in-react-18-5np</guid>
      <description>&lt;h2&gt;
  
  
  What’s new in React 18?
&lt;/h2&gt;

&lt;p&gt;The new version of React is out and it is now available on &lt;a href="https://www.npmjs.com/package/react"&gt;npm&lt;/a&gt;! It has introduced some new, interesting features. You won’t have to change any code or learn a new concept and very importantly it does not break any of your existing code.&lt;/p&gt;

&lt;h2&gt;
  
  
  👉How To Update
&lt;/h2&gt;

&lt;p&gt;It is fairly simple to update to the latest version of React in your existing project. Follow the below steps to update to React 18,&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Update dependencies
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    // for npm
    npm install react@18 react-dom@18

    //or for yarn
    yarn add react@18 react-dom@18
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Go to your root index.js and make the below changes,
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    // Before
    import { render } from 'react-dom';
    const container = document.getElementById('app');
    render(&amp;lt;App /&amp;gt;, container);

    // After
    import { createRoot } from 'react-dom/client';
    const container = document.getElementById('app');
    const root = createRoot(container);
    root.render(&amp;lt;App /&amp;gt;);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;React.createRoot&lt;/code&gt; creates a root running in React 18, which adds all of the improvements of React 18 and allows you to use concurrent features. This will be the root API moving forward.&lt;/p&gt;

&lt;p&gt;That’s all! You don’t need to make any other code changes 🥳.&lt;/p&gt;

&lt;h2&gt;
  
  
  👉Concurrency
&lt;/h2&gt;

&lt;p&gt;This is the most important concept added in React 18. Concurrency is not a feature, it is an implementation detail. It helps with state update prioritization so that urgent state updates can be prioritized over less urgent/time-consuming/blocking updates.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--FcCvRYFw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/11904/1%2AjrwGZMyvF1B4ee8yi9Zgjw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--FcCvRYFw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/11904/1%2AjrwGZMyvF1B4ee8yi9Zgjw.png" alt="React 18 — Concurrency" width="880" height="270"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A key property of Concurrent React is that rendering is interruptible. React always process all state updates in the order they were triggered i.e. in a single, uninterrupted, synchronous transaction. With the addition of this concurrency concept, you can tell react that a certain state update has a lower priority than the others, and then react will treat other state updates with higher priority.&lt;/p&gt;

&lt;p&gt;You can tell react that a state has a lower priority using one of the new APIs that are newly introduced in React 18 — &lt;code&gt;useTransition&lt;/code&gt; and &lt;code&gt;startTransition&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  👉useTransition and startTransition
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;useTransition&lt;/code&gt; and &lt;code&gt;startTransition&lt;/code&gt; let you mark some state updates as not urgent. Other state updates are considered urgent by default.&lt;br&gt;
e.g.&lt;br&gt;
urgent state updates — updating a text input&lt;br&gt;
non-urgent state updates — rendering a list of search results&lt;/p&gt;
&lt;h3&gt;
  
  
  useTransition
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Since it is a hook this can be used in functional components.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It returns an array with two values:&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;isPending&lt;/strong&gt;: a stateful value for the pending state of the transition&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;startTransition&lt;/strong&gt;: a function to start the transition&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  startTransition
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;This method is designed to be used when &lt;code&gt;useTransition&lt;/code&gt; is not available, e.g. class components.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;This lets you mark updates inside the provided callback as transitions.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;See the working examples below. We have a list of two thousand users to be rendered on UI. In the first example, we have used the traditional way of rendering the list whereas in the second example we have used the &lt;code&gt;useTransition&lt;/code&gt; hook. You will notice the performance difference while searching for a user.&lt;/p&gt;

&lt;p&gt;In the first example, you will notice a bit of lag while typing in the input box, this is because React is waiting for a filtered list state update and then updates the state of the input box.&lt;/p&gt;

&lt;p&gt;And in the second example, we are telling React to keep the list update state on low priority which results in performance improvement.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Without prioritization,&lt;br&gt;
&lt;iframe src="https://codesandbox.io/embed/demo-no-concurrency-bgnptq"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;With concurrency rendering,
&lt;iframe src="https://codesandbox.io/embed/demo-usetransition-d04xhk"&gt;
&lt;/iframe&gt;

&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Important Note: *&lt;em&gt;It *&lt;/em&gt;&lt;/strong&gt;is not recommended to wrap every state update with &lt;code&gt;startTransition&lt;/code&gt; instead, we should use it only when there is no other solution available to increase the UI performance.&lt;/p&gt;

&lt;h3&gt;
  
  
  useDefferedValues()
&lt;/h3&gt;

&lt;p&gt;It tells React to show the old state until a newly updated state is ready. This is similar to &lt;code&gt;statrTransition()&lt;/code&gt; but can be used where you don’t have complete control over the state updates, e.g. state passed from parent component to a child component. To use this, you simply need to wrap the state variable inside &lt;code&gt;useDeffedValue()&lt;/code&gt; , and then your child component will get the old state until an updated value is available.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    const userList = useDeferredValue(props.list);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  👉New Hooks for Libraries
&lt;/h2&gt;

&lt;p&gt;React 18 has introduced a few hooks,&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;useSyncExternalStore&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;useInsertionEffect&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;useId&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Note: These hooks are intended to be used by libraries, not application code. As an application developer you will probably ever use these hooks.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  👉Automatic Batching
&lt;/h2&gt;

&lt;p&gt;Automatic batching allows grouping multiple state updates together so that they get executed as one state update. This results in a single re-render for better performance.&lt;/p&gt;

&lt;p&gt;Batching was already present in the older version of React but was limited to React event handlers only. For example, if you have two state updates inside of the same click event, React has always batched these into one re-render. If you run the following code, you’ll see that every time you click, React only performs a single render although you set the state twice:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--hNbg50Wl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2800/1%2AcFz3ENUAp1GOwlpYLoPrWw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--hNbg50Wl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2800/1%2AcFz3ENUAp1GOwlpYLoPrWw.png" alt="Batching in the older version of React" width="880" height="616"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With automatic batching React 18 now support state update batching inside promises, setTimeout, native event handlers, or any other event that was not batched in React by default. See the below example,&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--OhPJv2wd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2800/1%2A-UJsutIDSiRJRYXO4D8bAw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--OhPJv2wd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2800/1%2A-UJsutIDSiRJRYXO4D8bAw.png" alt="Automatic batching in React 18" width="880" height="680"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  What if I don’t want to batch?
&lt;/h3&gt;

&lt;p&gt;Usually batching is safe, but some code may depend on reading something from the DOM immediately after a state change. For those use cases, you can use &lt;code&gt;ReactDOM.flushSync()&lt;/code&gt; to opt-out of batching:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    import { flushSync } from 'react-dom'; // Note: react-dom, not react

    function handleClick() {
      flushSync(() =&amp;gt; {
        setCounter(c =&amp;gt; c + 1);
      });
      // React has updated the DOM by now
      flushSync(() =&amp;gt; {
        setFlag(f =&amp;gt; !f);
      });
      // React has updated the DOM by now
    }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  👉New Suspense Features
&lt;/h2&gt;

&lt;p&gt;The suspense component is already present in the older version of React. However, the only supported use case was code splitting using React.lazy , and it wasn’t supported at all when rendering on the server. You must have been using the Suspense component to show a fallback component until another component is ready for rendering i.e. lazy loading of components.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    &amp;lt;Suspense fallback={&amp;lt;Spinner /&amp;gt;}&amp;gt;
      &amp;lt;LaziComponent /&amp;gt;
    &amp;lt;/Suspense&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;React 18 allows Suspense work for server-side rendering and in case of data fetching in near future.&lt;/p&gt;

&lt;h2&gt;
  
  
  👉Server Components
&lt;/h2&gt;

&lt;p&gt;React introduced Server Components however these are still in the research and development phase. These components are meant to render on the server only allowing to perform certain server-side only logic. This will be used to perform tasks on the server that should not run on the client may be for security or performance reasons.&lt;/p&gt;

&lt;p&gt;This is an experimental feature and not ready for you to use in your app. We are expecting this to be released in near future. More details are available &lt;a href="https://reactjs.org/blog/2020/12/21/data-fetching-with-react-server-components.html"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  And more...
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Check &lt;a href="https://hybrowlabs.com/react-js-dev-outsourcing"&gt;Hybrowlabs&lt;/a&gt; for React app development services.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>react</category>
      <category>react18</category>
      <category>javascript</category>
      <category>webdev</category>
    </item>
    <item>
      <title>How to abort a fetch API call?</title>
      <dc:creator>Rishikesh Vedpathak</dc:creator>
      <pubDate>Sun, 30 May 2021 10:02:44 +0000</pubDate>
      <link>https://forem.com/rishikeshvedpathak/how-to-abort-a-fetch-api-call-49a</link>
      <guid>https://forem.com/rishikeshvedpathak/how-to-abort-a-fetch-api-call-49a</guid>
      <description>&lt;p&gt;You probably faced a situation where you wonder is there a way to abort an API call before it gives back a response. For example, when you are downloading a large size video and you want to cancel the downloading process after waiting for a certain amount of time.&lt;/p&gt;

&lt;p&gt;Well, there is a good way to handle this. JavaScript provides an interface called &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/AbortController"&gt;AbortController&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The &lt;strong&gt;AbortController&lt;/strong&gt; interface represents a controller object that allows you to abort one or more Web requests as and when desired.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The basic syntax of AbortController would look like this,&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;controller&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;AbortController&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;downloadVideo&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// ...&lt;/span&gt;
  &lt;span class="nx"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;signal&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;controller&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;signal&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="c1"&gt;// ...&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="c1"&gt;// ...&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;abortDownload&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;controller&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;abort&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nothing much fancy, isn't it?&lt;br&gt;
We need to understand few basic points here though,&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create an instance of AbortController, which in return gives us a signal object instance.
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;controller&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;signal&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;Pass this signal object to our fetch request as an option inside the request's options object.
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;signal&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;controller&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;signal&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;When &lt;code&gt;abort()&lt;/code&gt; is called, the &lt;code&gt;fetch()&lt;/code&gt; promise rejects with a &lt;code&gt;DOMException&lt;/code&gt; named &lt;code&gt;AbortError&lt;/code&gt;, so we should handle it in &lt;code&gt;catch&lt;/code&gt; block.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here is working example from CodeSandbox.&lt;/p&gt;

&lt;p&gt;&lt;iframe src="https://codesandbox.io/embed/abortcontroller-fdu7z"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h3&gt;
  
  
  And more...
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Check &lt;a href="https://hybrowlabs.com/react-js-dev-outsourcing"&gt;Hybrowlabs&lt;/a&gt; for React app development services.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>javascript</category>
      <category>programming</category>
      <category>webdev</category>
      <category>codesandbox</category>
    </item>
    <item>
      <title>Scrum or Kanban</title>
      <dc:creator>Rishikesh Vedpathak</dc:creator>
      <pubDate>Mon, 24 May 2021 10:58:57 +0000</pubDate>
      <link>https://forem.com/rishikeshvedpathak/scrum-or-kanban-2c7e</link>
      <guid>https://forem.com/rishikeshvedpathak/scrum-or-kanban-2c7e</guid>
      <description>&lt;p&gt;Agile is a set of values and principles that help organizations create great products and services. Scrum and Kanban are frameworks that help teams follow the Agile principles and get work done in an Agile way.&lt;/p&gt;

&lt;p&gt;Scrum and Kanban both have some similarities that in both the frameworks work is done iteratively with a focus on reducing waste.&lt;br&gt;
There are some differences as well. Kanban methodologies are continuous and more fluid, whereas scrum is based on short, structured work sprints. Let’s discuss the key differences between them,&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Roles and responsibilities&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Delivery timelines&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Work assignment and prioritization&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Release methodologies&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Scoping and modifications&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Measurement of productivity&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  1. Roles and responsibilities
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--N8Gl2Mvm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2794/1%2AD0y9jtRXqU9L8IeqoVzMUg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--N8Gl2Mvm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2794/1%2AD0y9jtRXqU9L8IeqoVzMUg.png" alt="Roles and responsibilities" width="880" height="443"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Scrum has pre-recommended roles - Product Owner, Scrum Master, and the development team. These roles and their responsibilities are crystal clear to everyone in the team.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Kanban has no predefined roles as they are in Scrum. It promotes maintaining and respecting each other’s responsibilities as a team. It offers more flexibility in terms of work and the team is encouraged to work collaboratively.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;2. Delivery timelines&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--JhiVDfJg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2794/1%2AfonIj0HIBMZtFGD9QyOoZw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--JhiVDfJg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2794/1%2AfonIj0HIBMZtFGD9QyOoZw.png" alt="Delivery timelines" width="880" height="443"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;In Scrum, deliverables are divided into Sprints of predefined time periods, usually one to four weeks of a sprint.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Kanban is based on a continuous flow and does not enforce any time limits. The deliverables are delivered based on needs.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Work assignment and prioritization
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--81ojFcb_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2794/1%2AzoT3YnjHTm40kh6UZf45Nw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--81ojFcb_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2794/1%2AzoT3YnjHTm40kh6UZf45Nw.png" alt="Work assignment and prioritization" width="880" height="443"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Both Scrum and Kanban use the pull technique to allocate new tasks among teams but in two totally different ways.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In Scrum, tasks are pulled in batches and the process happens only at the start of each sprint.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In the case of Kanban, it allows the team to pull new tasks only once the previous task is completed.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. Release Methodology
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--yGCTAyqY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2794/1%2Ak1k8lB9mGJ03tP4hS4-k7w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--yGCTAyqY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2794/1%2Ak1k8lB9mGJ03tP4hS4-k7w.png" alt="Release Methodology" width="880" height="443"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;In Scrum, work is delivered in batches at the end of each sprint.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In Kanban, as it is a continuous flow process each task is delivered when it is completed&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. Scoping and Modifications
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--1SBlzFhW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2794/1%2APBaottZyBvIqNVlth9pbEg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1SBlzFhW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2794/1%2APBaottZyBvIqNVlth9pbEg.png" alt="Scoping and Modifications" width="880" height="443"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;In Scrum, once the Sprint has started it does not allow any modifications in the current scope until the Sprint is completed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Kanban is more flexible as compared to Scrum as changes can be made anytime in the timeline of a project. But of course, the modification is limited considering the work in progress limit.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  6. Measurement of Productivity
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--wJtKcq-D--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2794/1%2Aro1_J3MxaYrSn-UHKNMPsQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wJtKcq-D--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2794/1%2Aro1_J3MxaYrSn-UHKNMPsQ.png" alt="Measurement of Productivity" width="880" height="443"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;In Scrum, productivity is measured in terms of velocity through Sprints. Sprint velocity is the amount of work a team can deliver at the end of a Sprint. It guides future sprint commitments, or how much work the team takes on in future sprints.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In Kanban, lead time and cycle time are used to measure the average amount of time that it takes for a task to move from start to finish. Kanban teams strive to improve cycle time by working together on removing bottlenecks.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Which is better for your needs?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Both Scrum and Kanban are powerful, proven process tools that can vastly improve your project management.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Scrum is suitable for projects with stable priorities that may not change as much over time. Kanban is best for projects with widely varying priorities.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The best option is to become familiar with both of them and experiment with various aspects of both in your production environment. Creating a hybrid of both is perfectly acceptable if that works best for you.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Final words
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;The principles of both Scrum and Kanban are largely the same. Both frameworks will help you build better products and services.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Both Scrum and Kanban work by breaking down large and complex tasks into smaller ones to be completed efficiently and in a time-based manner.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;They place a high value on continuous improvement, optimization of the work in the process. They both focus on transparency and making the work visible that keeps all team members aligned.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Don’t ask, “kanban vs scrum.” Instead, ask “kanban or scrum” or even “kanban and scrum.” Make it more about the principles than the practices.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  And more...
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Check &lt;a href="https://hybrowlabs.com/react-js-dev-outsourcing"&gt;Hybrowlabs&lt;/a&gt; for React app development services.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>projectmanagement</category>
      <category>agile</category>
      <category>scrum</category>
      <category>kanban</category>
    </item>
    <item>
      <title>Movies app using react-query for server-side state management</title>
      <dc:creator>Rishikesh Vedpathak</dc:creator>
      <pubDate>Sun, 16 May 2021 18:37:40 +0000</pubDate>
      <link>https://forem.com/rishikeshvedpathak/movies-app-using-react-query-for-server-side-state-management-22de</link>
      <guid>https://forem.com/rishikeshvedpathak/movies-app-using-react-query-for-server-side-state-management-22de</guid>
      <description>&lt;p&gt;State management is one of the key factors that developers should consider before starting a React project. React developers usually tend to use libraries like Redux for a solution and with that, they often misuse the way the redux should be used.&lt;/p&gt;

&lt;p&gt;In this article, we will see how react-query helps solve the issues we face with redux and the practical example to demonstrate the use case of react-query.&lt;/p&gt;

&lt;p&gt;Here is the &lt;a href="https://react-query-movies-app.netlify.app/" rel="noopener noreferrer"&gt;demo application&lt;/a&gt; we are going to discuss,&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/Q92YalYbfkM"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  What is React Query?
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;React Query is often described as the missing data-fetching library for React, but in more technical terms, it makes fetching, caching, synchronizing and updating server state in your React applications a breeze.&lt;br&gt;
&lt;a href="https://react-query.tanstack.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;React Query&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;React Query changes the way we look at our application state. It introduces the concepts of &lt;strong&gt;Client state&lt;/strong&gt; and &lt;strong&gt;Server state&lt;/strong&gt;. While using redux, we often put all the state to redux store even the local state like if a sidebar is open or not. React Query allows you to defeat and overcome the tricky challenges and hurdles of server state and control your app data before it starts to control you.&lt;/p&gt;

&lt;p&gt;Key features of React Query,&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Help you remove &lt;strong&gt;many&lt;/strong&gt; lines of complicated and misunderstood code from your application and replace them with just a handful of lines of React Query logic.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Make your application more maintainable and easier to build new features without worrying about wiring up new server state data sources&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Have a direct impact on your end-users by making your application feel faster and more responsive than ever before.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Potentially help you save on bandwidth and increase memory performance&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Installation
&lt;/h2&gt;

&lt;p&gt;You can install React Query with &lt;strong&gt;NPM **or **Yarn&lt;/strong&gt;,&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm i react-query 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;or&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;yarn add react-query
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
  
  
  Devtools for React Query
&lt;/h2&gt;

&lt;p&gt;React Query does come with dedicated devtools. The devtools are bundle split into the react-query/devtools. Just import it into your app.js file as,&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { ReactQueryDevtools } from 'react-query/devtools'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;By default, React Query Devtools are not included in production bundles when process.env.NODE_ENV === 'production', so you don't need to worry about excluding them during a production build.&lt;/p&gt;

&lt;p&gt;Once imported, wrap your root component with QueryClientProvider&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;



&lt;p&gt;Now, when you run your application locally it will show a small react-query icon in the bottom-left corner and when you click on it opens up a devtools as shown below,&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F3810%2F1%2A6BfuqOOH_RrrVI7g4ZRI-Q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F3810%2F1%2A6BfuqOOH_RrrVI7g4ZRI-Q.png" alt="React Query Devtools"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The devtools has many other options which we can configure at our convenience. Refer to &lt;a href="https://react-query.tanstack.com/devtools" rel="noopener noreferrer"&gt;https://react-query.tanstack.com/devtools&lt;/a&gt; for more details.&lt;/p&gt;

&lt;h2&gt;
  
  
  OMDb API
&lt;/h2&gt;

&lt;p&gt;For this project, we are using the OMDb API. It is a free web service to obtain movie information. It is simple to use and the doc page is pretty easy to understand. However it just provides the GET APIs, so we won’t be able to perform POST/PUT/DELETE operations.&lt;br&gt;
&lt;a href="https://www.omdbapi.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;OMDb API&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Fetch movies using React Query(useQuery hook)
&lt;/h2&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;
&lt;br&gt;
Yes, it is as simple as it looks. The useQuery returns a few very important states.

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;isLoading or status === 'loading' - The query has no data and is currently fetching&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;isError or status === 'error' - The query encountered an error&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;isSuccess or status === 'success' - The query was successful and data is available&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;isIdle or status === 'idle' - The query is currently disabled (you'll learn more about this in a bit)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Beyond those primary states, more information is available depending on the state of the query:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;error - If the query is in an isError state, the error is available via the error property.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;data - If the query is in a success state, the data is available via the data property.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;isFetching - In any state, if the query is fetching at any time (including background refetching) isFetching will be true.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Using these states we can decide what to display on UI,&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;h2&gt;
  
  
  Query Keys
&lt;/h2&gt;

&lt;p&gt;Consider a scenario where we want to fetch movies depending on the search text. For this, we need to pass search text as a query parameter to our GET API. We can achieve this with the help of query keys.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;At its core, React Query manages query caching for you based on query keys. Query keys can be as simple as a string, or as complex as an array of many strings and nested objects. As long as the query key is serializable, and &lt;strong&gt;unique to the query’s data&lt;/strong&gt;, you can use it!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In our case, the query key is a simple string value.&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;
&lt;br&gt;
You can see the queries cached in devtools,

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F3806%2F1%2AVDrIJSXftTwqW8cl6SyiQA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F3806%2F1%2AVDrIJSXftTwqW8cl6SyiQA.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Understanding Caching
&lt;/h2&gt;

&lt;p&gt;The query key that we have provided to our useQuery hook is used internally for refetching, caching, and sharing your queries throughout your application.&lt;/p&gt;

&lt;p&gt;To understand this let's see the below steps,&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;You searched ‘Batman’ for the very first time. It will fetch data from API and while fetching, the application will display loader on UI.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Now you clear the search box and searched for ‘Marvel’, the same will happen.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You again clear the search box and searched for ‘Batman’ again, in this case, you will see search results are displayed immediately without any wait time and loader on UI. This is because React query managed to cache the data for the unique key i.e. [“movies”, “Batman”].&lt;br&gt;
And React Query intelligently updates the data returned from the second API call in its cached data.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;This improves our application performance.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;React Query is a powerful and easy-to-use library to manage our application’s server state. It is a great alternative to Redux, MobX and can reduce boilerplate code to a larger extent. React Query is not a replacement for local/client state management. However, you can use React Query alongside most client state managers with zero issues.&lt;/p&gt;

&lt;p&gt;We have created a Movie List Application just using React Query to demonstrate its use case. We did not use any other state management library which concludes the importance of keeping client and server states separately.&lt;/p&gt;

&lt;p&gt;You can find the final code in the GitHub repo,&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/RishikeshVedpathak" rel="noopener noreferrer"&gt;
        RishikeshVedpathak
      &lt;/a&gt; / &lt;a href="https://github.com/RishikeshVedpathak/react-query-movies-app" rel="noopener noreferrer"&gt;
        react-query-movies-app
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A simple ReactJS movies app based on OMDb API to demonstrate react-query use cases as a state management library
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;React-Query-Movies-App&lt;/h1&gt;

&lt;/div&gt;
&lt;p&gt;A simple ReactJS movies app based on OMDb API to demonstrate react-query use cases as a state management library&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer nofollow" href="https://user-images.githubusercontent.com/1983286/118408706-5280da00-b6a4-11eb-887f-39457e754290.png"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F1983286%2F118408706-5280da00-b6a4-11eb-887f-39457e754290.png" alt="Movie List App using React Query"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;💻 Tech used:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;React&lt;/li&gt;
&lt;li&gt;React Query for server-side state management&lt;/li&gt;
&lt;li&gt;OMDb API to fetch movie data&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;🌎 Live demo: &lt;a href="https://react-query-movies-app.netlify.app/" rel="nofollow noopener noreferrer"&gt;https://react-query-movies-app.netlify.app/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;📌 Blog: &lt;a href="https://rishi-vedpathak.medium.com/movies-app-using-react-query-for-server-side-state-management-184140142daf" rel="nofollow noopener noreferrer"&gt;https://rishi-vedpathak.medium.com/movies-app-using-react-query-for-server-side-state-management-184140142daf&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;🎥 Youtube preview: &lt;a href="https://www.youtube.com/watch?v=Q92YalYbfkM" rel="nofollow noopener noreferrer"&gt;https://www.youtube.com/watch?v=Q92YalYbfkM&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;



&lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/RishikeshVedpathak/react-query-movies-app" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;p&gt;I hope this will help you to understand and encourage you to freely use React Query in your application. Please feel free to give feedback and suggestions!&lt;/p&gt;

&lt;h3&gt;
  
  
  And more...
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Check &lt;a href="https://hybrowlabs.com/react-js-dev-outsourcing" rel="noopener noreferrer"&gt;Hybrowlabs&lt;/a&gt; for React app development services.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>react</category>
      <category>reactquery</category>
      <category>reactstatemanagement</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Create Responsive React app using react-responsive</title>
      <dc:creator>Rishikesh Vedpathak</dc:creator>
      <pubDate>Sun, 01 Mar 2020 14:55:55 +0000</pubDate>
      <link>https://forem.com/rishikeshvedpathak/create-responsive-react-app-using-react-responsive-fnj</link>
      <guid>https://forem.com/rishikeshvedpathak/create-responsive-react-app-using-react-responsive-fnj</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--lIFXvsT6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn-images-1.medium.com/max/1024/1%2A1ScBZ-IhswU0uPIlLj_E8g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--lIFXvsT6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn-images-1.medium.com/max/1024/1%2A1ScBZ-IhswU0uPIlLj_E8g.png" alt="" width="800" height="363"&gt;&lt;/a&gt;React Responsive&lt;/p&gt;

&lt;p&gt;Before we start, visit this demo application, this will give you a rough idea of what we are going to discuss in this article.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://rishikeshvedpathak.github.io/react-responsive-demo/"&gt;React App&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This article will help you to understand how we can handle responsive UI easily in ReactJS. You must have known about the media queries which was introduced in CSS3.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Media queries&lt;/strong&gt; are useful when you want to modify your site or app depending on a device’s general type (such as print vs. screen) or specific characteristics and parameters (such as screen resolution or browser &lt;a href="https://developer.mozilla.org/en-US/docs/Glossary/viewport"&gt;viewport&lt;/a&gt; width).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Media queries is the first thing that comes in our(the UI developers) mind when we want to develop a responsive website. But sometimes it makes hard for us to handle all the viewport attributes in every CSS file. What if we can manage it at a single place. In case of React app, we can take the advantage of React’s techniques like hooks and HOC.&lt;/p&gt;

&lt;h4&gt;
  
  
  About react-responsive
&lt;/h4&gt;

&lt;p&gt;There a node package called react-responsive which makes it easy to manage media queries.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.npmjs.com/package/react-responsive"&gt;react-responsive&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;to install this package use below 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 i react-responsive
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;once installed, you can use it as&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;



&lt;h4&gt;
  
  
  HOC for react-responsive
&lt;/h4&gt;

&lt;blockquote&gt;
&lt;p&gt;A higher-order component (HOC) is an advanced technique in React for reusing component logic. HOCs are not part of the React API, per se. They are a pattern that emerges from React’s compositional nature.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Lets take an advantage of HOC. We will create a HOC which will act as a wrapper to manage the responsive config at a single place. Below is simple code for HOC,&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;Use this HOC in your component say Home as,&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;h4&gt;
  
  
  Demo App
&lt;/h4&gt;

&lt;p&gt;Here is the glimpse of a demo app created using react-responsive.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--FimRlIUg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://cdn-images-1.medium.com/max/1024/1%2A1uNScBlvZ7OWqoaCECfmrQ.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--FimRlIUg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://cdn-images-1.medium.com/max/1024/1%2A1uNScBlvZ7OWqoaCECfmrQ.gif" alt="" width="" height=""&gt;&lt;/a&gt;react-responsive-demo&lt;/p&gt;

&lt;p&gt;I hope this article has helped to understand how we can easily create and manage responsive UI in react app using react-responsive and HOC. You can find the final code in the GitHub repo,&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/RishikeshVedpathak/react-responsive-demo"&gt;RishikeshVedpathak/react-responsive-demo&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  And more...
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Check &lt;a href="https://hybrowlabs.com/react-js-dev-outsourcing"&gt;Hybrowlabs&lt;/a&gt; for React app development services.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>react</category>
      <category>responsivewebdesign</category>
      <category>frontend</category>
      <category>webdev</category>
    </item>
    <item>
      <title>React — Environment specific builds using .env with CRA and env-cmd</title>
      <dc:creator>Rishikesh Vedpathak</dc:creator>
      <pubDate>Thu, 23 Jan 2020 11:37:10 +0000</pubDate>
      <link>https://forem.com/rishikeshvedpathak/react-environment-specific-builds-using-env-with-cra-and-env-cmd-296b</link>
      <guid>https://forem.com/rishikeshvedpathak/react-environment-specific-builds-using-env-with-cra-and-env-cmd-296b</guid>
      <description>&lt;h3&gt;
  
  
  React — Environment specific builds using .env with CRA and env-cmd
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--s9MP7mlr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn-images-1.medium.com/max/1024/1%2AlQv7is8V1kTjNkYl4rgViw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--s9MP7mlr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn-images-1.medium.com/max/1024/1%2AlQv7is8V1kTjNkYl4rgViw.png" alt="React — Environment specific builds using .env with CRA and env-cmd" width="800" height="384"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Many times we(the developers) struggles with making environment specific builds. The process might require changing variables like API_BASE_URL, APP_TITLE etc. This is a manual task and needs to be done carefully, you don’t want to miss any field here to change.&lt;/p&gt;

&lt;p&gt;But why to waste our development time in making these manual changes, in stead we can make a good use of  &lt;code&gt;.env&lt;/code&gt;  file.&lt;/p&gt;

&lt;h4&gt;
  
  
  1. Environment variables in Create React App
&lt;/h4&gt;

&lt;p&gt;We can add environment specific variables to our project by declaring them in a local JS file. By default we have &lt;code&gt;NODE_ENV&lt;/code&gt; defined for us by CRA, and we can add any other environment variables starting with &lt;code&gt;REACT_APP_&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;WARNING: Do not store any secrets (such as private API keys) in your React app! Environment variables are embedded into the build, meaning anyone can view them by inspecting your app’s files.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The environment variables are embedded during the build time. Since Create React App produces a static HTML/CSS/JS bundle, it can’t possibly read them at runtime.&lt;/p&gt;

&lt;p&gt;Note: You must create custom environment variables beginning with &lt;code&gt;_REACT_APP_&lt;/code&gt;. Any other variables except &lt;code&gt;_NODE_ENV_&lt;/code&gt; will be ignored to avoid accidentally exposing a private key on the machine that could have the same name. Changing any environment variables will require you to restart the development server if it is running.&lt;/p&gt;

&lt;h4&gt;
  
  
  2. Managing environment variables in .env files
&lt;/h4&gt;

&lt;p&gt;We can create a file named &lt;code&gt;.env&lt;/code&gt; in which we can store our environment variables. This .env file will be treated as a default file to define permanent environment variables.&lt;/p&gt;

&lt;p&gt;Now we need to create other .env files to support staging and production environments. So lets create  &lt;code&gt;.env.staging&lt;/code&gt; and  &lt;code&gt;.env.production&lt;/code&gt; files.&lt;/p&gt;

&lt;p&gt;So the files would look like,&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// .env

REACT_APP_TITLE = "My Awesome App"
REACT_APP_SESSION_TIME = "60"

// .env.staging

REACT_APP_API_BASE_URL = "https://app.staging.com/api/"

// .env.production

REACT_APP_API_BASE_URL = "https://app.prod.com/api/"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  3. Install env-cmd package
&lt;/h4&gt;

&lt;p&gt;Now that we have our separate env files ready we can use them make environment specific builds. For than we will use an npm package &lt;code&gt;env-cmd&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.npmjs.com/package/env-cmd"&gt;env-cmd&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is a simple node program for executing commands using an environment from an env file. Install this package with below 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 env-cmd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  4. Create commands to create environment specific builds
&lt;/h4&gt;

&lt;p&gt;Now open your &lt;code&gt;package.json&lt;/code&gt; file and add below scripts,&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"scripts": {
  "start": "react-scripts start",
  "start:staging": "env-cmd -f .env.staging react-scripts start",
  "start:prod": "env-cmd -f .env.production react-scripts start",
  "build": "react-scripts build",
  "build:staging": "env-cmd -f .env.staging react-scripts build",
  "build:prod": "env-cmd -f .env.production react-scripts build",
  "test": "react-scripts test",
  "eject": "react-scripts eject"
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With this, we can use below commands for creating environment specific builds.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// command to start local sever with .env file. This is used while actual development  
npm start

// command to start local sever with .env.staging file  
npm run start:staging

// command to start local sever with .env.production file  
npm run start:prod

// command to build app with .env.staging file  
npm run build:staging

// command to build app with .env.production file  
npm run build:prod
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Conclusion
&lt;/h4&gt;

&lt;p&gt;We have understood why it is useful to have scripts for making environment specific builds. Doing so, we can save our time with automated process and manage environment variables easily.&lt;/p&gt;

&lt;h3&gt;
  
  
  And more...
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Check &lt;a href="https://hybrowlabs.com/react-js-dev-outsourcing"&gt;Hybrowlabs&lt;/a&gt; for React app development services.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>react</category>
      <category>node</category>
      <category>frontend</category>
    </item>
    <item>
      <title>State management in React application using Context API</title>
      <dc:creator>Rishikesh Vedpathak</dc:creator>
      <pubDate>Tue, 10 Dec 2019 11:57:04 +0000</pubDate>
      <link>https://forem.com/rishikeshvedpathak/state-management-in-react-application-using-context-api-53gh</link>
      <guid>https://forem.com/rishikeshvedpathak/state-management-in-react-application-using-context-api-53gh</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--D-NwnW8I--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AEwk8QbNnNKVFzIXAtsvC5w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--D-NwnW8I--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AEwk8QbNnNKVFzIXAtsvC5w.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Before we start, visit this demo application. This will give you a rough idea of what we are going to discuss in this article.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://rishikeshvedpathak.github.io/react-context-example/"&gt;React App&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you are one of the developers who is using redux to manage you application’s state then you must be very curious to know more about how can I use the react’s new Context API to manage the my application’s state.&lt;/p&gt;

&lt;p&gt;You might have the same set of questions in your mind as I have,&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;What is React Context API?&lt;/li&gt;
&lt;li&gt;Does it serve the same purpose as redux?&lt;/li&gt;
&lt;li&gt;Will it replace redux? and does that mean I can get rid of the complexity of redux? 😜&lt;/li&gt;
&lt;li&gt;Is it the future of state management?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Well… I might help you to find answers for these. I have written a simple application to demonstrate how we can use React’s Context API for state management. Below is the repo link,&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/RishikeshVedpathak/react-context-example"&gt;RishikeshVedpathak/react-context-example&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  What is React Context API? And when to use it?
&lt;/h4&gt;

&lt;blockquote&gt;
&lt;p&gt;Context provides a way to pass data through the component tree without having to pass props down manually at every level.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;When we start writing a react application, we need to pass some data between components. Typically, even before using redux, we pass data top-down (parent to child) via props. Which woks fine in initial stages, but as your application scales it becomes cumbersome for us to pass the data in this way. Context API provides an alternative way to share values like these between components without having to explicitly pass a prop through every level of the tree.&lt;/p&gt;

&lt;p&gt;In &lt;a href="https://reactjs.org/blog/2018/03/29/react-v-16-3.html"&gt;&lt;strong&gt;&lt;em&gt;React v16.3.0&lt;/em&gt;&lt;/strong&gt;&lt;/a&gt; context api was introduced. Before that, we used to use redux to handle this situation.&lt;/p&gt;

&lt;h4&gt;
  
  
  Why Context API and not props?
&lt;/h4&gt;

&lt;p&gt;It is true that you can handle everything with props which you can with Context API, but then why to use Context API?&lt;/p&gt;

&lt;p&gt;Consider your application structure where you have multiple components defined. And these components may have parent-child relation or they might be siblings. In either case wouldn’t it be cumbersome for you to pass data down the tree. What if there is way you can manage the data at a single location(store) and this data is then be used by all the components. This sounds nice, right!!&lt;/p&gt;

&lt;p&gt;This is what we can achieve using Context API. See the below image for better understanding.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--IVoktZoA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/785/1%2AgLC1UP2zOf3FKcJwYBO6Gw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--IVoktZoA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/785/1%2AgLC1UP2zOf3FKcJwYBO6Gw.png" alt=""&gt;&lt;/a&gt;Props Drilling vs Context API&lt;/p&gt;

&lt;h4&gt;
  
  
  Let’s see it in action
&lt;/h4&gt;

&lt;p&gt;See the example here,&lt;/p&gt;

&lt;p&gt;&lt;a href="https://rishikeshvedpathak.github.io/react-context-example/"&gt;React App&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/8PkQi7dq0U4"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;This application consists of components,&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Header&lt;/li&gt;
&lt;li&gt;Home&lt;/li&gt;
&lt;li&gt;Cart&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These three components share the same data. Any event taken from these components will update the same data.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Create a context(store) for your application.&lt;/p&gt;

&lt;a href="https://medium.com/media/85688c7960d37d35afe87117a5abad4e/href"&gt;https://medium.com/media/85688c7960d37d35afe87117a5abad4e/href&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Tell your application to use this context.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://medium.com/media/2fcb454dc036bb26e56eed9906f9a4d7/href"&gt;&lt;/a&gt;&lt;a href="https://medium.com/media/2fcb454dc036bb26e56eed9906f9a4d7/href"&gt;https://medium.com/media/2fcb454dc036bb26e56eed9906f9a4d7/href&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Read data from Context&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is very simple. Use just need to use react’s new hook called &lt;strong&gt;useContext&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;const cartContext = useContext(AppContext)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The cartContext will now hold the data for your component.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Update data in Context&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://medium.com/media/cfd768cddf71173d52aee2ef1fc52660/href"&gt;&lt;/a&gt;&lt;a href="https://medium.com/media/cfd768cddf71173d52aee2ef1fc52660/href"&gt;https://medium.com/media/cfd768cddf71173d52aee2ef1fc52660/href&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The function &lt;strong&gt;handleCartUpdate&lt;/strong&gt; will update the data in context. This will the be reflected in header as well as in Cart component.&lt;/p&gt;

&lt;h4&gt;
  
  
  Conclusion
&lt;/h4&gt;

&lt;p&gt;We have successfully created a simple react application to demonstrate the use case of Context API. You can find the final code in the GitHub repo,&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/RishikeshVedpathak/react-context-example"&gt;RishikeshVedpathak/react-context-example&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I hope this will help you to understand and encourage you to freely use React Context API in your application. Please feel free to give feedback and suggestions!&lt;/p&gt;

</description>
      <category>frontenddev</category>
      <category>statemanagement</category>
      <category>react</category>
      <category>reactcontextapi</category>
    </item>
    <item>
      <title>Implement Push Notification in React Native using Expo in just 5 min</title>
      <dc:creator>Rishikesh Vedpathak</dc:creator>
      <pubDate>Mon, 14 Oct 2019 07:55:15 +0000</pubDate>
      <link>https://forem.com/rishikeshvedpathak/implement-push-notification-in-react-native-using-expo-in-just-5-min-4c1m</link>
      <guid>https://forem.com/rishikeshvedpathak/implement-push-notification-in-react-native-using-expo-in-just-5-min-4c1m</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Mkn2CT1I--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2Asj0kYogQ6MlYGKKQ_51L-A.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Mkn2CT1I--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2Asj0kYogQ6MlYGKKQ_51L-A.png" alt="" width="880" height="461"&gt;&lt;/a&gt;Implement Push Notification in React Native using Expo in just 5 min&lt;/p&gt;

&lt;p&gt;Back in days of native mobile application development, implementing push notification was a complex part of your application. It used to take lot of development efforts and time. But hey! we are in &lt;a href="https://facebook.github.io/react-native/"&gt;React Native&lt;/a&gt; era now, where you have the power of JavaScript to implement it easily. And thanks to &lt;a href="https://expo.io/"&gt;Expo&lt;/a&gt; to made it so easy to configure and use it in our react native app.&lt;/p&gt;

&lt;p&gt;Today, we’ll use expo to implement push notification in our simple react native app.&lt;/p&gt;

&lt;p&gt;First understands some basics,&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is push notification and why do we need this?&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Push notification is an automated message sent by an application to a user when the application is not open. App owners will receive push notifications whenever new content is uploaded.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A text message will bring you to your messaging app, while a push notification will bring the user to whatever app sent the message. Push notifications are much better because the user knows exactly who it’s coming from. It’s clear that the message is from the app that they’ve installed on their device.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is Expo?&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Expo is a set of tools and services for building, deploying, and quickly iterating on native iOS, Android, and web apps from the same codebase.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Now lets dive into the actual implementation and we will understand it step-by-step.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Install Expo CLI and create new project
&lt;/h3&gt;

&lt;p&gt;First thing you need to have Expo CLI installed globally on your development machine. You can install it by using npm 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 -g expo-cli**
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;After installing Expo CLI create a new project using command:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;**expo init ReactNativePushNotification**
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Expo CLI will ask you to choose between templates, choose ‘blank’ under the Managed workflow section. Expo CLI is now initializing a new project: it copies a basic template and installs react, react-native and expo. When the project is initialized and ready to go, the command will exit.&lt;/p&gt;
&lt;h3&gt;
  
  
  2. Install Permissions Module
&lt;/h3&gt;

&lt;p&gt;When it comes to adding functionality that can access potentially sensitive information on a user’s device, such as their location, or possibly send them unwanted push notifications, you will need to ask the user for their permission first. To do so we need to add &lt;a href="https://docs.expo.io/versions/latest/sdk/permissions/"&gt;Permissions module&lt;/a&gt; in our app.&lt;/p&gt;

&lt;p&gt;Install Permissions module using below expo cli command,&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;**expo install expo-permissions**
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;This will add dependency in your package.json file. Here are the dependencies at the time of building this project:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;**"expo": "^35.0.0",  
"expo-permissions": "~7.0.0",  
"react": "16.8.3"**
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  3. Get Token For Push Notification
&lt;/h3&gt;

&lt;p&gt;Now that we have permission module installed, we will use it to get NOTIFICATION token from user. For that we first need to ask user to grant permission.&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;



&lt;p&gt;Focus on the function &lt;strong&gt;getPushNotificationPermissions&lt;/strong&gt; &lt;em&gt;.&lt;/em&gt; This function asks user to grant notification permission and prints the token on console. If you run this with &lt;strong&gt;yarn start&lt;/strong&gt; , you will see the token printed in you shell console as below.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--pkB24Nrs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/580/1%2A-Z1YBXk74dKA_jqIAx472g.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--pkB24Nrs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/580/1%2A-Z1YBXk74dKA_jqIAx472g.jpeg" alt="" width="580" height="81"&gt;&lt;/a&gt;ExponentPushToken&lt;/p&gt;

&lt;p&gt;The token &lt;strong&gt;ExponentPushToken[YPU4bUD2NANefVgvBa9ANi]&lt;/strong&gt; is used to uniquely identify the device and send notification to it.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Send Notification To Our App
&lt;/h3&gt;

&lt;p&gt;It’s time to buckle up and get ready to send our first notification. For that we need a tool which will generate a notification request and send it to our app. Expo has provided a tool for that&lt;/p&gt;

&lt;p&gt;&lt;a href="https://expo.io/dashboard/notifications"&gt;Expo - Push notification tool&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Open this tool and add below information in the form shown,&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--m-sNSRUd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AX-rI-L8QelRp-jdeJDHzPg.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--m-sNSRUd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AX-rI-L8QelRp-jdeJDHzPg.jpeg" alt="" width="880" height="449"&gt;&lt;/a&gt;Expo Push Notification Tool&lt;/p&gt;

&lt;p&gt;Here , you will notice that the Expo Push Token is nothing but the token that we have generated earlier in our app.&lt;/p&gt;

&lt;p&gt;Now, keep your app running on your mobile and hit the ‘Send a notification’ button at the bottom of the tool. You will get a notification right on top of your mobile screen. &lt;strong&gt;Cool, isn’t it!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--GfagpAls--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/270/1%2AH_DURC0n9EzGqEgyxfhMng.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--GfagpAls--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/270/1%2AH_DURC0n9EzGqEgyxfhMng.jpeg" alt="" width="270" height="540"&gt;&lt;/a&gt;ReactNativePushNotification&lt;/p&gt;

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

&lt;p&gt;We have successfully created a react native app(with Expo) which allows user to receive and display push notifications. You can find the final code in the GitHub repo,&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/RishikeshVedpathak/ReactNativePushNotification"&gt;RishikeshVedpathak/ReactNativePushNotification&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I hope this will help you to understand and encourage you to freely use Expo for with React Native. Please feel free to give feedback and suggestions!&lt;/p&gt;

&lt;h3&gt;
  
  
  And more...
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Check &lt;a href="https://hybrowlabs.com/react-js-dev-outsourcing"&gt;Hybrowlabs&lt;/a&gt; for React app development services.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>react</category>
      <category>reactnative</category>
      <category>expo</category>
      <category>pushnotification</category>
    </item>
    <item>
      <title>React Native — Login with Facebook</title>
      <dc:creator>Rishikesh Vedpathak</dc:creator>
      <pubDate>Sun, 06 Oct 2019 19:20:52 +0000</pubDate>
      <link>https://forem.com/rishikeshvedpathak/react-native-login-with-facebook-4mmi</link>
      <guid>https://forem.com/rishikeshvedpathak/react-native-login-with-facebook-4mmi</guid>
      <description>&lt;h3&gt;
  
  
  React Native — Login with Facebook using Expo
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Yk1gXiJH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://cdn-images-1.medium.com/max/300/1%2ADTEc0XyMSIWZvaanu9v8cA.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Yk1gXiJH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://cdn-images-1.medium.com/max/300/1%2ADTEc0XyMSIWZvaanu9v8cA.gif" alt="" width="300" height="600"&gt;&lt;/a&gt;ReactExpoFacebookAuth&lt;/p&gt;

&lt;p&gt;React native is very popular these days when it comes to hybrid mobile apps development. This article will help you to integrate &lt;a href="https://developers.facebook.com/docs/graph-api/"&gt;Facebook's Graph API&lt;/a&gt; in your native mobile app using &lt;a href="https://facebook.github.io/react-native/"&gt;React Native&lt;/a&gt; with &lt;a href="https://expo.io/"&gt;Expo&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Expo is a set of tools and services for building, deploying, and quickly iterating on native iOS, Android, and web apps from the same codebase.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4&gt;
  
  
  1. Install Expo CLI and create new project
&lt;/h4&gt;

&lt;p&gt;First thing you need to have Expo CLI installed globally on your development machine. You can install it by using npm 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 -g expo-cli**
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;After installing Expo CLI create a new project using command:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;**expo init ReactNativeFacebookAuth**
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Expo CLI will ask you to choose between templates, choose ‘blank’ under the Managed workflow section. Expo CLI is now initializing a new project: it copies a basic template and installs react, react-native and expo. When the project is initialized and ready to go, the command will exit.&lt;/p&gt;
&lt;h4&gt;
  
  
  2. Setup Facebook App
&lt;/h4&gt;

&lt;p&gt;Go to &lt;a href="https://developers.facebook.com/apps/"&gt;https://developers.facebook.com/apps/&lt;/a&gt; and sign up if you have not yet done so. You will see below screen,&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--33ONsycE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AXggh131iOZZVQQOFwTE_JA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--33ONsycE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AXggh131iOZZVQQOFwTE_JA.png" alt="Facebook developers — Add new app" width="880" height="431"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Create a new app and add your details as below,&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--AIn0v16c--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AozZiKkaGDqIxoYa6Q849dg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--AIn0v16c--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AozZiKkaGDqIxoYa6Q849dg.png" alt="Facebook developers — Create new app" width="880" height="432"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This will create a new facebook app. Then go to &lt;strong&gt;settings &amp;gt; Basic&lt;/strong&gt; in the left panel. Scroll down to the page and click on Add platform and select Android.&lt;br&gt;&lt;br&gt;
 Add rRW++LUjmZZ+58EbN5DVhGAnkX4= as an Android &lt;em&gt;key hash&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;This is it, you are now ready to write a code to integrate your facebook app into your react native app.&lt;/p&gt;

&lt;p&gt;You can more information on Facebook integration for Expo apps at below link,&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.expo.io/versions/latest/sdk/facebook/"&gt;Documentation&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  3. Add Facebook to the application
&lt;/h4&gt;

&lt;p&gt;Below command provides Facebook integration for Expo apps.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;**expo install expo-facebook**
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;Write a code to integrate Facebook&lt;/strong&gt;&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;



&lt;h4&gt;
  
  
  4. Understanding Facebook API
&lt;/h4&gt;

&lt;p&gt;Make a note of below method,&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;await Facebook.logInWithReadPermissionsAsync('712635261226351', {
 permissions: ['public\_profile'],
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;&lt;em&gt;Facebook.logInWithReadPermissionsAsync&lt;/em&gt;&lt;/strong&gt; method prompts the user to log into Facebook and grants your app permission to access their Facebook data.&lt;br&gt;&lt;br&gt;
Permissions is an array specifying the permissions to ask for from Facebook for this login. The permissions are strings as specified in the &lt;a href="https://developers.facebook.com/docs/facebook-login/permissions"&gt;Facebook API documentation&lt;/a&gt;. The default permissions are ['public_profile', 'email'].&lt;/p&gt;

&lt;p&gt;It returns { type: 'success', token, expires, permissions, declinedPermissions }&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;If the user or Facebook cancelled the login, returns { type: 'cancel' }.&lt;/li&gt;
&lt;li&gt;token is a string giving the access token to use with Facebook HTTP API requests.&lt;/li&gt;
&lt;li&gt;expires is the time at which this token will expire, as seconds since epoch. You can save the access token using, say, AsyncStorage, and use it till the expiration time.&lt;/li&gt;
&lt;li&gt;permissions is a list of all the approved permissions.&lt;/li&gt;
&lt;li&gt;declinedPermissions is a list of the permissions that the user has rejected.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;See below output screenshots for reference,&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--2ecHxMGa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/270/1%2A7qzCSmdapLqGZ44rnNjQfg.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2ecHxMGa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/270/1%2A7qzCSmdapLqGZ44rnNjQfg.jpeg" alt="" width="270" height="540"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--tOn_B8n_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/270/1%2A2ztpHpaOhiC23gXDdXKq4A.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tOn_B8n_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/270/1%2A2ztpHpaOhiC23gXDdXKq4A.jpeg" alt="" width="270" height="540"&gt;&lt;/a&gt;React Expo Facebook Auth&lt;/p&gt;

&lt;h4&gt;
  
  
  Conclusion
&lt;/h4&gt;

&lt;p&gt;We have successfully created a react native app(with Expo) which allows user to login using their Facebook account. You can find the final code in the GitHub repo,&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/RishikeshVedpathak/ReactNativeFacebookAuth"&gt;RishikeshVedpathak/ReactNativeFacebookAuth&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I hope this will help you to understand and encourage you to freely use facebook’s graph API with react native. Please feel free to give feedback and suggestions!&lt;/p&gt;

&lt;h3&gt;
  
  
  And more...
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Check &lt;a href="https://hybrowlabs.com/react-js-dev-outsourcing"&gt;Hybrowlabs&lt;/a&gt; for React app development services.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>reactnative</category>
      <category>facebookgraphapi</category>
      <category>facebooklogin</category>
      <category>expo</category>
    </item>
    <item>
      <title>React Native Map with real time location selection for Android</title>
      <dc:creator>Rishikesh Vedpathak</dc:creator>
      <pubDate>Mon, 03 Jun 2019 11:35:44 +0000</pubDate>
      <link>https://forem.com/rishikeshvedpathak/react-native-map-with-real-time-location-selection-for-android-21hd</link>
      <guid>https://forem.com/rishikeshvedpathak/react-native-map-with-real-time-location-selection-for-android-21hd</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F352%2F1%2AZwx58P_-NooFcR2Ycu3gIA.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F352%2F1%2AZwx58P_-NooFcR2Ycu3gIA.gif"&gt;&lt;/a&gt;React Native Map with real time location selection for Android&lt;/p&gt;

&lt;p&gt;These days almost every mobile app needs the map integration for a purpose. &lt;a href="https://facebook.github.io/react-native/" rel="noopener noreferrer"&gt;React Native&lt;/a&gt; gives a great ability to serve this purpose easily. Today we will see how to integrate google map in and how to use google map platform &lt;a href="https://maps.googleapis.com/" rel="noopener noreferrer"&gt;https://maps.googleapis.com&lt;/a&gt; to get the real time location by moving around the map view.&lt;/p&gt;

&lt;h4&gt;
  
  
  Create new project using react-native-cli
&lt;/h4&gt;

&lt;p&gt;First thing you need to have react-native-cli installed globally on your development machine. You can install it by using npm 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 -g react-native-cli**
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After installing react-native-cli create a new project using command:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;This will generate a boilerplate for you with a some pre-configured dependencies. Here are the dependencies at the time of building this project:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;**"react": "16.8.3",  
"react-native": "0.59.5"**
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can run your app using &lt;strong&gt;react-native run-android&lt;/strong&gt; , this will display below output on your device.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F540%2F1%2AkroUxSx-bcxmONEyy9eBFQ.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F540%2F1%2AkroUxSx-bcxmONEyy9eBFQ.jpeg"&gt;&lt;/a&gt;React native initial device output&lt;/p&gt;

&lt;h4&gt;
  
  
  Install and configure react-native-maps
&lt;/h4&gt;

&lt;p&gt;Now let’s install &lt;a href="https://github.com/react-native-community/react-native-maps" rel="noopener noreferrer"&gt;react-native-maps&lt;/a&gt; using npm command: npm install react-native-maps --save. The library ships with platform native code that needs to be compiled together with React Native. This requires you to configure your build tools. The detailed installation instructions are given &lt;a href="https://github.com/react-native-community/react-native-maps/blob/master/docs/installation.md" rel="noopener noreferrer"&gt;here&lt;/a&gt;, we will do the setup by using react native link. Run react-native link react-native-maps, this will link the package with our native app(for both Android and iOS). You should the below output on the command line,&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F784%2F1%2AVsPqXbuoECYVfKqyfd7REg.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F784%2F1%2AVsPqXbuoECYVfKqyfd7REg.jpeg"&gt;&lt;/a&gt;Command line output after executing 'react-native link react-native-maps'&lt;/p&gt;

&lt;h4&gt;
  
  
  Add permissions for map view in our app
&lt;/h4&gt;

&lt;p&gt;Before writing code to display map in our app, we need to get make sure that the required permissions are configured and permitted by the user. To do that add below set of permissions in android/app/src/main/AndroidManifest.xml file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;\&amp;lt;uses-permission android:name="android.permission.SYSTEM\_ALERT\_WINDOW" /\&amp;gt;

\&amp;lt;uses-permission android:name="android.permission.ACCESS\_FINE\_LOCATION" /\&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Also, we need to add add google’s Geo-location API key. Generate your own API key from&lt;/p&gt;

&lt;p&gt;&lt;a href="https://cloud.google.com/maps-platform/" rel="noopener noreferrer"&gt;Geo-location APIs | Google Maps Platform | Google Cloud&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Add below line of code in the same file inside &amp;lt;application&amp;gt; tag at the end.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;\&amp;lt;meta-data
android:name="com.google.android.geo.API\_KEY"
android:value="\&amp;lt;\&amp;lt;YOUR API KEY GOES HERE\&amp;gt;\&amp;gt;"/\&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Write a code to display map view
&lt;/h4&gt;

&lt;p&gt;Now it’s time to write some code to display the real time map view in our app.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;constructor(props) {
 super(props);
 this.state = {
 loading: true,
 region: {
 latitude: 10,
 longitude: 10,
 latitudeDelta: 0.001,
 longitudeDelta: 0.001
 }
 };
}

render() {
 return (
\&amp;lt;MapView
 style={styles.map}
 initialRegion={this.state.region}
 showsUserLocation={true}
 onMapReady={this.onMapReady}
 onRegionChangeComplete={this.onRegionChange}\&amp;gt;

\&amp;lt;MapView.Marker
 coordinate={{ "latitude": this.state.region.latitude, 
 "longitude": this.state.region.longitude }}
 title={"Your Location"}
 draggable /\&amp;gt;

\&amp;lt;/MapView\&amp;gt;);
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Above code will display a simple map view as shown below,&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F540%2F1%2ANyVIG62E4Me9DdwocrfMsg.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F540%2F1%2ANyVIG62E4Me9DdwocrfMsg.jpeg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Add custom marker using font
&lt;/h4&gt;

&lt;p&gt;Many times we see a center positioned icon on the map, which is fixed at the center and we see the map moved around it. To achieve this we will need to add a custom marker using icon or an image. Here we will show icon as a marker and to do so we need to configure and add font. Follow below steps to add fontawesome fonts,&lt;/p&gt;

&lt;p&gt;Setp 1: Download fontawesome-webfont.ttf file and rename the file to fontawesome.ttf.&lt;br&gt;&lt;br&gt;
Step 2: create &lt;strong&gt;/assets/fonts/&lt;/strong&gt; directory in your project directory at root level.&lt;br&gt;&lt;br&gt;
Step 3: paste fontawesome.ttf file to /assets/fonts/&lt;br&gt;&lt;br&gt;
Step 4: add below code to your package.json file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"rnpm": {
 "assets": [
 "./assets/fonts"
 ]
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Step 5: run react-native link.&lt;/p&gt;

&lt;p&gt;Now that we have fonts configured, we can add a font as a marker.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;\&amp;lt;View\&amp;gt;
 \&amp;lt;MapView
 initialRegion={this.state.region}
 showsUserLocation={true}
 \&amp;gt;
 \&amp;lt;/MapView\&amp;gt;

\&amp;lt;View style={styles.mapMarkerContainer}\&amp;gt;
 \&amp;lt;Text style={{ fontFamily: 'fontawesome', fontSize: 42, color: 
 "#ad1f1f" }}\&amp;gt;&amp;amp;#xf041;\&amp;lt;/Text\&amp;gt;
 \&amp;lt;/View\&amp;gt;
 \&amp;lt;/View\&amp;gt;
\&amp;lt;/view\&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will display the output as below,&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F540%2F1%2AquJRxJJFsaqsGIEPTeSVHA.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F540%2F1%2AquJRxJJFsaqsGIEPTeSVHA.jpeg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Get location details from the map
&lt;/h4&gt;

&lt;p&gt;We can get the location details using &lt;a href="https://maps.googleapis.com" rel="noopener noreferrer"&gt;google’s map API&lt;/a&gt;. All we need to provide is latitude, longitude and API key to the &lt;a href="https://maps.googleapis.com" rel="noopener noreferrer"&gt;https://maps.googleapis.com&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Current latitude and longitude can be captured by using onRegionChangeComplete prop method provided by MapView.&lt;/p&gt;

&lt;p&gt;See below final output with live real time location selection using react-native-maps,&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F540%2F1%2A2r9YAGWAL_XZz0lXGHN_Wg.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F540%2F1%2A2r9YAGWAL_XZz0lXGHN_Wg.jpeg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Conclusion
&lt;/h4&gt;

&lt;p&gt;We have successfully created a react native app which can capture and display user’s current location on the map. You can find the final code in the GitHub repo,&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/RishikeshVedpathak/ReactNativeMapView" rel="noopener noreferrer"&gt;RishikeshVedpathak/ReactNativeMapView&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I hope this will help you to understand and encourage you to freely use google’s map API with react native. Please feel free to give feedback and suggestions!&lt;/p&gt;

&lt;h3&gt;
  
  
  And more...
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Check &lt;a href="https://hybrowlabs.com/react-js-dev-outsourcing" rel="noopener noreferrer"&gt;Hybrowlabs&lt;/a&gt; for React app development services.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>reactnative</category>
      <category>android</category>
      <category>googlemapapi</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
