React Native

Hire the Top 3% of Freelance React Native Developers

Toptal is a marketplace for top React Native developers, engineers, programmers, coders, architects, and consultants. Top companies and start-ups choose Toptal React Native freelancers for their mission-critical software projects.

No-Risk Trial, Pay Only If Satisfied.

Clients Rate Toptal React Native Developers4.4 / 5.0on average across 267 reviews as of Oct 25, 2020

Hire Freelance React Native Developers and Engineers

Jeduan Cornejo

Freelance React Native Developer

MexicoToptal Member Since November 5, 2015

Jeduan is a software engineer with more than 5 years of experience working in almost every area possible from freelance to a government agency. He has a particular passion for JavaScript. He can create REST and APIs from scratch and has worked with libraries and frameworks like React Native, Angular, React.js, and Backbone. He has worked on wide range of projects that required a breadth of knowledge and excellent communication skills.

Show More

Johnathan Hebert

Freelance React Native Developer

United StatesToptal Member Since December 13, 2016

Johnathan has 15 years of experience writing web apps that span consumer productivity software to mission-critical financial trading platforms. He has extensive knowledge of front-end JavaScript and browser APIs as well as significant experience with popular frameworks and libraries like React and Redux. Johnathan's deep full-stack experience includes Node.js and Express, MongoDB as well as more traditional technologies like PHP, ASP.NET, and MySQL.

Show More

Stanislav Krasnoyarov

Freelance React Native Developer

RussiaToptal Member Since November 29, 2014

Stan is a CTO and a full-stack engineer with 15 years of experience. He has spent the past seven years doing web and mobile apps. He's good at designing architecture and implementing agile development process. The technologies he's worked with include: Node.js, Elixir, Rails, AngularJS, React, React Native, Objective-C, iOS, Java, Android. He's also familiar with C++, Haskell, C#/.NET. He is an enthusiastic programmer and a great guy to know.

Show More

Arpit Agrawal

Freelance React Native Developer

United KingdomToptal Member Since October 31, 2018

Arpit is a product-oriented, full-stack web developer, mainly with Angular and React Native. His expertise lies in building MVPs for startups and mid-sized companies, scalable microservices, serverless infrastructure, web crawlers, notification apps, REST/Socket APIs, infrastructure modeling, complex algorithms, AWS, and deployments. Arpit can pull-off projects single-handedly and is the perfect candidate for converting ideas into prototypes.

Show More

Dino Trojak

Freelance React Native Developer

CroatiaToptal Member Since April 15, 2015

Dino loves building quality software and experimenting with new technologies. His language of choice is JavaScript. He believes in Agile practices and TDD, meaning that he is devoted to awesome tests and doesn't settle for anything less. It means his definition of "refactoring" doesn’t consider only the code. He is continuously working on improving his ever-expanding skillset.

Show More

Dustin Cass

Freelance React Native Developer

United StatesToptal Member Since September 1, 2018

Dustin has been a professional front-end engineer for over ten years and has worked at companies and agencies large and small. He's passionate and dedicated to his craft, and he always goes the extra mile for his employers and clients.

Show More

Gabriel Bull

Freelance React Native Developer

CanadaToptal Member Since February 9, 2014

Gabriel excels at development, design, and branding. He combines these skills every day to imagine, draw, and build amazing web sites and web applications, from the ground up to final deployment.

Show More

Scott Jungwirth

Freelance React Native Developer

United StatesToptal Member Since June 20, 2018

Scott is an engineering leader and technology innovator with nearly a decade of experience mentoring and building agile teams focused on delivering exceptional products through a culture of teamwork, innovation, and development.

Show More

Sign up now to see more profiles.

Start Hiring

A Hiring Guide

Guide to Hiring a Great React Native Developer

React Native developers need to have a particular set of skills to be effective. Teasing out whether a developer candidate is a good fit for your project can be a challenge without knowing the right topics to pursue.

Read Hiring Guide

React Native Hiring Resources

More Resources to Hire React Native Developers

Job Description Template

Interview Questions

Jobs

Trustpilot
Toptal in the press

... allows corporations to quickly assemble teams that have the right skills for specific projects.

Despite accelerating demand for coders, Toptal prides itself on almost Ivy League-level vetting.

Our clients
Building a cross-platform app to be used worldwide
Thierry Jakicevic
Building a cross-platform app to be used worldwide
1
2
3
Creating an app for the game
Conor Kenney
Creating an app for the game
1
2
3
Leading a digital transformation
Elmar Platzer
Leading a digital transformation
1
2
3
Testimonials

Tripcents wouldn't exist without Toptal. Toptal Projects enabled us to rapidly develop our foundation with a product manager, lead developer, and senior designer. In just over 60 days we went from concept to Alpha. The speed, knowledge, expertise, and flexibility is second to none. The Toptal team were as part of tripcents as any in-house team member of tripcents. They contributed and took ownership of the development just like everyone else. We will continue to use Toptal. As a start up, they are our secret weapon.

Brantley Pace, CEO & Co-Founder

Tripcents

In addition to sharp technical skills, Faruk had a great attitude and is a really exceptional communicator. He always let us know where he was with his work, thoroughly and reliably. That's not always the case, and it made working remotely considerably easier. He was an easy integration into the team.

Leif Abraham, Co-Founder

AND CO Ventures Inc

I am more than pleased with our experience with Toptal. The professional I got to work with was on the phone with me within a couple of hours. I knew after discussing my project with him that he was the candidate I wanted. I hired him immediately and he wasted no time in getting to my project, even going the extra mile by adding some great design elements that enhanced our overall look.

Paul Fenley, Director

K Dunn & Associates

The developers I was paired with were incredible -- smart, driven, and responsive. It used to be hard to find quality engineers and consultants. Now it isn't.

Ryan Rockefeller, CEO

Radeeus

Toptal understood our project needs immediately. We were matched with an exceptional freelancer from Argentina who, from Day 1, immersed himself in our industry, blended seamlessly with our team, understood our vision, and produced top-notch results. Toptal makes connecting with superior developers and programmers very easy.

Jason Kulik, Co-Founder

ProHatch

As a small company with limited resources we can't afford to make expensive mistakes. Toptal provided us with an experienced programmer who was able to hit the ground running and begin contributing immediately. It has been a great experience and one we'd repeat again in a heartbeat.

Stuart Pocknee , Principal

Site Specific Software Solutions

We used Toptal to hire a developer with extensive Amazon Web Services experience. We interviewed four candidates, one of which turned out to be a great fit for our requirements. The process was quick and effective.

Abner Guzmán Rivera, CTO and Chief Scientist

Photo Kharma

Sergio was an awesome developer to work with. Top notch, responsive, and got the work done efficiently.

Dennis Baldwin, Chief Technologist and Co-Founder

PriceBlink

Working with Marcin is a joy. He is competent, professional, flexible, and extremely quick to understand what is required and how to implement it.

André Fischer, CTO

POSTIFY

We needed a expert engineer who could start on our project immediately. Simanas exceeded our expectations with his work. Not having to interview and chase down an expert developer was an excellent time-saver and made everyone feel more comfortable with our choice to switch platforms to utilize a more robust language. Toptal made the process easy and convenient. Toptal is now the first place we look for expert-level help.

Derek Minor, Senior VP of Web Development

Networld Media Group

Toptal's developers and architects have been both very professional and easy to work with. The solution they produced was fairly priced and top quality, reducing our time to launch. Thanks again, Toptal.

Jeremy Wessels, CEO

Kognosi

We had a great experience with Toptal. They paired us with the perfect developer for our application and made the process very easy. It was also easy to extend beyond the initial time frame, and we were able to keep the same contractor throughout our project. We definitely recommend Toptal for finding high quality talent quickly and seamlessly.

Ryan Morrissey, CTO

Applied Business Technologies, LLC

I'm incredibly impressed with Toptal. Our developer communicates with me every day, and is a very powerful coder. He's a true professional and his work is just excellent. 5 stars for Toptal.

Pietro Casoar, CEO

Ronin Play Pty Ltd

Working with Toptal has been a great experience. Prior to using them, I had spent quite some time interviewing other freelancers and wasn't finding what I needed. After engaging with Toptal, they matched me up with the perfect developer in a matter of days. The developer I'm working with not only delivers quality code, but he also makes suggestions on things that I hadn't thought of. It's clear to me that Amaury knows what he is doing. Highly recommended!

George Cheng, CEO

Bulavard, Inc.

As a Toptal qualified front-end developer, I also run my own consulting practice. When clients come to me for help filling key roles on their team, Toptal is the only place I feel comfortable recommending. Toptal's entire candidate pool is the best of the best. Toptal is the best value for money I've found in nearly half a decade of professional online work.

Ethan Brooks, CTO

Langlotz Patent & Trademark Works, Inc.

In Higgle's early days, we needed the best-in-class developers, at affordable rates, in a timely fashion. Toptal delivered!

Lara Aldag, CEO

Higgle

Toptal makes finding a candidate extremely easy and gives you peace-of-mind that they have the skills to deliver. I would definitely recommend their services to anyone looking for highly-skilled developers.

Michael Gluckman, Data Manager

Mxit

Toptal’s ability to rapidly match our project with the best developers was just superb. The developers have become part of our team, and I’m amazed at the level of professional commitment each of them has demonstrated. For those looking to work remotely with the best engineers, look no further than Toptal.

Laurent Alis, Founder

Livepress

Toptal makes finding qualified engineers a breeze. We needed an experienced ASP.NET MVC architect to guide the development of our start-up app, and Toptal had three great candidates for us in less than a week. After making our selection, the engineer was online immediately and hit the ground running. It was so much faster and easier than having to discover and vet candidates ourselves.

Jeff Kelly, Co-Founder

Concerted Solutions

We needed some short-term work in Scala, and Toptal found us a great developer within 24 hours. This simply would not have been possible via any other platform.

Franco Arda, Co-Founder

WhatAdsWork.com

How to Hire React Native Developers through Toptal

1

Talk to One of Our Industry Experts

A Toptal director of engineering will work with you to understand your goals, technical needs, and team dynamics.
2

Work With Hand-Selected Talent

Within days, we'll introduce you to the right React Native developer for your project. Average time to match is under 24 hours.
3

The Right Fit, Guaranteed

Work with your new React Native developer for a trial period (pay only if satisfied), ensuring they're the right fit before starting the engagement.

FAQs

  • How are Toptal React Native developers different?

    At Toptal, we thoroughly screen our React Native developers to ensure we only match you with talent of the highest caliber. Of the more than 100,000 people who apply to join the Toptal network each year, fewer than 3% make the cut. You'll work with engineering experts (never generalized recruiters or HR reps) to understand your goals, technical needs, and team dynamics. The end result: expert vetted talent from our network, custom matched to fit your business needs. Start now.

  • Can I hire React Native developers in less than 48 hours through Toptal?

    Depending on availability and how fast you can progress, you could start working with a React Native developer within 48 hours of signing up. Start now.

  • What is the no-risk trial period for Toptal React Native developers?

    We make sure that each engagement between you and your React Native developer begins with a trial period of up to two weeks. This means that you have time to confirm the engagement will be successful. If you're completely satisfied with the results, we'll bill you for the time and continue the engagement for as long as you'd like. If you're not completely satisfied, you won't be billed. From there, we can either part ways, or we can provide you with another expert who may be a better fit and with whom we will begin a second, no-risk trial. Start now.

Share
React Native

How to Hire a Great React Native Developer

React Native is a library for rendering mobile applications on iOS, Android, and UWP. Using React Native, it’s possible (in most cases) to write code once and deploy to all available target platforms—which is probably why you’re looking to hire dedicated React Native developers.

React Native shares many concepts and libraries with React, so it’s important for any React Native job that the developer is at least familiar with React on the web and its common patterns. It’s also recommended that a React Native programmer is proficient with JavaScript and especially with the ES6 syntax.

Many of the questions in our React hiring guide apply when hiring app developers for React Native as well, so it is better to keep both guides in mind at the time of the interview. Of course, the JavaScript hiring guide also applies: As the guide mentions, there’s a big difference between having some understanding of the JavaScript framework and being an expert in it, and being a JavaScript expert is paramount when working on React and React Native jobs.

React Native Interview Questions

Let’s dive into some React Native interview questions to help you in the process of assessing your candidate.

What are React Native components?

Components are the building blocks of a React Native application. React Native provides a set of components that map to the corresponding native components on each platform which the React Native developer can use.

Some components can be used on all platforms (like View, Button, and FlatList) while others are platform-specific, as they map to native components that exist only on iOS or Android: For example, iOS does not have a hardware back button, so a BackHandler component for iOS apps would not make sense.

The developer can create their own component by extending the React.Component class, and implementing the Render method:

export default class App extends React.Component {
  render() {
    return (
      // my component's visual tree
    );
  }
}

What’s the best way to display items in a list, performance-wise?

React Native offers a VirtualizedList component that provides virtualization out of the box. While VirtualizedList can be used directly, the more high-level FlatList (display items in a scrollable list) and SectionList (same as FlatList but with grouping and custom sections) implementations are fit for most use cases.

Some things are important to keep in mind when working with a VirtualizedList, however.

There’s no assurance that the internal state of the items in the list will be kept when scrolling the list: Based on the amount of elements and the level of scrolling, the list might dispose of some elements outside of the viewport. Those elements will be recreated from scratch based on props when coming back into the viewport. So, the developer needs to make sure that the item can be recreated based on props alone.

Items should specify a Key property which identifies them uniquely. Alternatively, it’s possible to provide a custom KeyExtractor in the list’s definition:

<FlatList KeyExtractor="{(item) => //function that uniquely identifies the item }" />

It’s a good practice to make sure list items do not re-render if passed in the same props they already have. This can be accomplished by implementing shouldComponentUpdate in the item’s component, or alternatively inherit from the React.PureComponent class, which provides an implementation of shouldComponentUpdate that does shallow prop and state comparison.

How do you style components in React Native?

Styling is specified by plain JavaScript objects, and all React Native components accept a Style prop that can be set with the object specifying the style.

Note that while the syntax resembles CSS, it’s not CSS, and styling a React Native application’s components does not follow the same conventions. Notably, all properties follow the camelCase convention instead of dash-case (background-color becomes backgroundColor) and layout can be specified only using the Flexbox algorithm.

Since style definitions are done in code, it is easy to parametrize styles and do things that usually CSS preprocessors/extensions (Less, Sass) are used for:

import { StyleSheet } from 'react-native';
import { primaryColor, secondaryColor } from './style/consts'; // values defined in another .js file

let width = 50;

///...

const style = StyleSheet.create({
  'color': primaryColor,
  'backgroundColor': secondaryColor,
  'width': width
});

How would you debug a React Native application?

While running a React Native application in the emulator, it’s possible to access the developer menu by either “shaking” the device (by selecting the “shake” gesture in the emulator) or by pressing Command-D (iOS) or Control/Command-M (Android). The developer menu will display a “enable JS debugging” menu entry, among other things. After clicking it, it will be possible to browse to http://localhost:8081/debugger-ui with Chrome/Chromium, which displays the debugger.

Log traces are visible by running react-native log-android for Android, and react-native log-ios for iOS, while the emulator is up.

If using Redux, Reactotron is especially useful to see all API calls and actions dispatched.

Our existing codebase is in Xamarin, and you would be helping to port it to React Native. What would be the issues to watch for?

Unlike our other React Native interview questions, this may not apply to every project. But if it does, it’s certainly an important line of questioning to consider.

React Native and Xamarin.Forms adopt the same approach towards making cross-platform applications: Both take a UI definition (virtual DOM or XAML) and transform it to native code.

There are two main differences between the two:

  • The language of choice: It’s almost always C# for Xamarin—though potentially any other language available for the .NET framework—and JavaScript for React Native.
  • The development platforms they’re available on: React Native is available for Linux, MacOS, and Windows, while Xamarin is officially available only on Windows and MacOS.

While React Native and Xamarin.Forms do conceptually the same thing, the abstractions they use are not directly compatible. For example, a component available on React Native might not necessarily be available on Xamarin, and vice versa. Also, the same abstraction is often implemented in different ways across the two frameworks: Take FlatList and SectionList on React Native, which map to their corresponding concept on both iOS and Android, and ListView on Xamarin.Forms, which conflates the two into one single UI component.

If a React Native developer were to tackle a port from Xamarin.Forms, it would be greatly beneficial for them to have at least some experience with C#, and ideally some experience with Xamarin.

What’s the relationship between React and React Native?

React is a JavaScript library that allows the developer to define a user interface in a declarative way. If offers some infrastructure when it comes to state handling (props for one-way data flow, injected from the outside; state for two-way data flow, internally managed state) and general component lifecycle method hooks.

React keeps in memory an internal representation of the UI (virtual DOM). It uses this representation to compute deltas in the visual appearance of the components on props/state changes, in order to make it possible to partially update the UI on data changes—thus avoiding the need for complete redraws.

React Native sits on top of React and, where React would render the virtual DOM as an HTML document, React Native maps the virtual DOM to native iOS/native Android components. So, while React is often used together with JSX in order to generate HTML output, React Native has its own set of tags that represent abstractions of native components. Those native components are what get displayed on the device in the end.

So, if a React component would look like the following:

class ReactJSComponent extends React.Component {
  render() {
    return(
    <div>
      <p>Hello world!</p>
    </div>
    );
  }
}

…then an equivalent React Native component could be something like:

class ReactNativeComponent extends React.Component { //note that's the same class we're extending
  render() {
    return(
    <View>
      <Text>Hello world!</Text>
    </View>
    );
  }
}

Libraries that are often use to handle state (Redux, MobX) and most plugins that are not dependent on UI are used the exact same way in React and React Native, and most patterns/best practices that apply to React apply to React Native too.

Highlight the major differences and tradeoffs between native development and mobile development using React Native.

React Native has clear benefits when it comes to mobile application development:

  • React Native allows for cross-platform development: The application logic is written once, using the same language (JavaScript) and can be deployed to the available target platforms (iOS, Android, and UWP). Writing an application natively for a specific platform requires instead an almost complete rewrite when porting said application to a different platform.
  • A React Native app, with some limitations (see below), is written in JavaScript. That can be a plus or a minus depending on the situation, but generally, finding developers that are experienced with JavaScript is not as hard as for other languages.
  • Hot reloading is a great React Native feature, allowing the developer to change the application code and see those changes directly in the emulator, with no need for recompiling/redeploying.

React Native is a strong choice, especially considering the ever-increasing user base and continuous improvements made to it. But there are some drawbacks to be considered:

  • While performance has been improving steadily over the last two years, React Native is still significantly slower than a visually equivalent native application, especially when the application makes heavy use of animations or has a complex UI.
  • Some native functionality is not available for use directly from React Native, and it might be necessary to write modules for each target platform, in the target platform’s language.
  • JavaScript is a mainstream language and thus widely known and used, but it has some serious drawbacks. It might be challenging to write and maintain a JavaScript application that scales up to a certain size.

How does React Native behave across different platforms?

React Native takes the virtual DOM, generated by React based on the interface definition—i.e. the result gotten from calling the render method on the application’s components. It then uses this to generate native code for each of the target platforms.

That means that, for the most part, the developer doesn’t have to worry about platform-specific details and can rely on React Native outputting the right native code based on the situation. For example, if the developer adds a Text component, it will be transformed into a UITextField on iOS, and into a TextView on Android. The same goes for layout definitions: React Native uses flexbox, and that is translated as proper layout definitions specific to the target platform when the application is deployed.

Sometimes the abstraction provided by React Native is available only on some of the target platforms (an example would be the already-mentioned BackHandler). When that’s the case, it is up to the developer to properly make use of the abstraction. A check for the current platform might be necessary:

import {Platform} from 'react-native';

if (Platform.OS == 'ios') {
  // iOS-specific code
}

There are some cases where React Native does not provide an abstraction layer over native components or functionalities. In those cases, the developer will have to write a native module, in the target platform’s language. That is done by extending the ReactContextBaseJavaModule for Android apps, and by implementing the RCTBridgeModule in iOS.

With those modules in place, it’s possible to interact with them from React Native using the endpoints explicitly provided by the modules themselves. We simply annotate methods with @ReactMethod on Android and by exporting classes and methods with RCT_EXPORT_MODULE and RCT_EXPORT_METHOD on iOS:

public class MyModule extends ReactContextBaseJavaModule {

  @ReactMethod
  public void myMethod() {
    // implementation
  }

}
@implementation MyModule

RCT_EXPORT_MODULE();

RCT_EXPORT_METHOD(myMethod)
{
   // implementation
}
import {NativeModules} from 'react-native';
// call it like this:
NativeModules.MyModule.myMethod();

What are the different options available when it comes to handling state in React Native?

As it is, React (and thus React Native) does not enforce any kind of global state management. The only patterns available to use for the developer are injecting state into components using props, which are meant to be immutable, and internal component state managed privately through the state property.

There are several options available when it comes to global state management, the more widely used being Redux. If the developer is familiar with Redux on React, there are no changes for when it comes to using it on React Native. The behavior is exactly the same, as are the common patterns of use.

Another available option to manage global state is MobX, which handles state using observables and bindings, the way Knockout.js and WPF do. While Redux follows functional programming paradigms—and is suited to that kind of programming style, for that reason—MobX can be easier to pick up for those coming from an object-oriented background.

Both options are valid, and it’s important to consider the team’s composition before picking one or the other. Redux is often the choice preferred by those with a functional programming background, but it can be challenging to get up to speed with. MobX offers a flatter learning curve, but it might show problems when the application grows up to a certain size.

What is a Thunk?

Generally speaking, a Thunk is a function returned by another function. It is used to defer computing a result to when the result is actually needed:

function doMyThing() {
  return function() {
    return "my result";
  }
}

The concept is important for the React (and React Native) developer because they’re used in one of the most popular pieces of middleware for Redux: redux-thunk. That allows React actions, which are normally just plain JavaScript objects, like this:

{
  type: "MY_ACTION_TYPE",
  value: "myvalue"
}

…to actually dispatch other actions directly, like so:

function myActionCreator() {
  return function(dispatch, state) {
    dispatch(anotherActionCreator());
  }
}

There are other pieces of middleware for Redux that do not expose the concept directly—the most famous being React Saga—but it’s very important that your React Native developer candidate is comfortable with functional programming concepts like the above.

What is middleware? How is it used in Redux?

Redux middleware is a function provided to Redux by the developer (either imported from an external module, or developed directly) that intercepts all actions dispatched before they reach the reducers, potentially does some operations on those actions, and forwards them to the reducers afterwards.

Middleware thus provides a hook that can be used to run custom operations on actions before they reach the reducers. This is important, as many libraries and extensions (e.g., the aforementioned redux-thunk) register themselves as middleware. A piece of middleware returns a Thunk, as it is a function that returns a function.

A sample middleware implementation looks like this:

// middleware that does nothing
const myMiddleware = store => next => action => {
  return next(action);
}

Here, store is the application’s store, available from inside the middleware function. That means that store.dispatch is available from inside the middleware, thus making it possible to dispatch more than one action per action received—beware of infinite loops! Then next is a function that returns a function (which will dispatch the action) and expects an action as the parameter.

The above middleware can be registered using the following:

const store = createStore(
  myCombinedReducers,
  applyMiddleware(myMiddleware, otherMiddleware)
)

Gauging Your React Native App Development Candidate

The answers to these questions should give you an idea of how much a mobile app development candidate is comfortable working with React Native.

This hiring guide, of course, was not meant to cover an exhaustive interview, but to act as a guideline for hiring full-time or part-time experts—–there’s much more both to React Native development and to app development in general. For example, a dedicated developer who is very experienced with both JavaScript and React should be able to pick up React Native and its concepts in no time.

At the same time, someone who has been working a bit with React Native development but does not have extensive experience with JavaScript or with native development might know the answers to the questions above, but not be very effective as a React Native app developer. Your mileage may vary, as with everything else in life. Good luck!

Featured Toptal React Native Publications

Top React Native Developers are in High Demand.

Start Hiring