I have previously written about how there is a difference between Mobile Developers and Web Developers. Yes, they are both programmers and they are building user interfaces but the devices they program against are different and the the languages and tools used are different.
React is a technology created by engineers at Facebook to help build user interfaces using JavaScript for the web. It has some interesting approaches to handling data, breaking up code into "components" and efficiencies in how it renders these components in your browser.
These technical details get into the weeds really quickly so here is the important part: React has become enormously popular because it has a good developer experience, makes code more testable, and is easier to work on and share on large teams.
Note: "developer experience"? I'm talking about how easy something is to work on and how much developers like to work on a specific technology.
A large ecosystem has grown up around React, and because of this network effect it has become easier and easier to build large complex web applications using React on the UI side. Frontend web development is now pretty much dominated by React.
React Native is a project that brings the core concepts of React to mobile devices (Android and iOS). To put it more clearly: you can use React Native to write React code in JavaScript and the output will be native mobile applications for Apple devices and Android devices.
There are several potential advantages here:
Well, there is a catch, yes. React and it's libraries are mostly built to create and render HTML elements for web pages in browsers. But React Native is actually going to output native components that iOS and Android use respectively. This is a little bit of a complicated situation to explain. I'm going to show some diagrams from the official React Native Documentation to try to help explain this.
You can think of React as a set of instructions but these instructions can be translated into multiple outputs. You can make the outputs map to buttons on a phone or buttons on a website. React Native is a set of technologies that change this mapping from web HTML output to mobile phone UI elements (buttons, scrollbars, views, text) that iOS and Android use.
Here is a mapping they provide in their documentation as an example to demonstrate this:
You can see how a given React Native component can map to different outputs on different platforms. This ends up making things look different on iOS & Android and there are limitations developers must deal with around this.
Additionally because of this you cannot just easily port existing code in React directly over to React Native projects. It's not that simple even though this is what people often immediately assume. The point I'm trying to get across here is that React Native is a different skillset than React for web, even though it builds on top of React for web knowledge.
When looking for React Native developers it's important to understand that you are looking for mobile developers that going to be working in the specific technology of React Native. If you are going to look for any web developer with plain old React on their resume you can't really be sure they would be interested in a React Native project. This is something you want to clarify immediately because React is not the same as React Native.