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.

We’ve been blown away by the level of talent we've been able to hire through Toptal.

Brad Rozran, Optimizely
Meet our
React Native Developers
Alexis Hernandez, Coder.
Alexis Hernandez
Software Engineer
Previously at
Samsung
Anne Adams, Senior Programmer and Consultant.
Anne Adams
Senior Developer
Previously at
Merrill Lynch
Danilo Resende, Freelance Developer for Hire.
Danilo Resende
Senior Software Engineer
Previously at
Instagram
April Leone, Freelance Developer for Hire.
April Leone
Senior Software Developer
Previously at
Rosetta Stone
Jongwook Kim, Senior Programmer and Consultant.
Jongwook Kim
Software Engineer
Previously at
Facebook
Darin Erat Sleiter, Coder.
Darin Erat Sleiter
Senior Software Developer
Previously at
Stanford
Trusted by leading brands and startups

Our Exclusive Network of React Native Developers

Gabriel Bull

React Native Developer
Gabriel excels at development, design, and branding. He combines these skills every day to imagine, draw, and build amazing web sites and web application... Read More
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. Read Less
React NativeCSSHTML5PHP+9 More
View Gabriel's Profile

Anna Berman

React Native Developer
Anna is a software engineer with over 15 years of experience in C++—focusing on distributed real-time financial applications. For the last two years, she... Read More
Anna is a software engineer with over 15 years of experience in C++—focusing on distributed real-time financial applications. For the last two years, she has been working as the CTO of a startup, architecting the full-stack solution for the web and iPhone MVP, and developing all of the back-end processes and APIs in Node.js and Firebase, as well as implementing the majority of the front-end in Swift and Angular. Read Less
React NativeC++JavaScriptNode.js+2 More
View Anna's Profile

Jeremy Greer

React Native Developer
Jeremy is a senior software engineer with a passion for modern JavaScript—client and server-side—including React, Redux, Angular, and Express. He believe... Read More
Jeremy is a senior software engineer with a passion for modern JavaScript—client and server-side—including React, Redux, Angular, and Express. He believes in clean code, testing, and reading the manual. Making cool software makes him giddy, and he is deeply moved every time he sees his work being used by others. Read Less
React NativeJavaScriptReactFront-end
View Jeremy's Profile

Matthew Keas

React Native Developer
Matthew is an enthusiastic student of computer science, distributed computing, compiler theory, computer security, self-configured Linux systems, and fun... Read More
Matthew is an enthusiastic student of computer science, distributed computing, compiler theory, computer security, self-configured Linux systems, and functional theory. Recent projects involve cross-cloud and private-cloud architecture, configuring multiple Kubernetes clusters, Rancher cluster manager, Longhorn distributed block-storage management, Apache Kafka, and IoT edge-computing. Read Less
React NativeC#ReactJavaScript+9 More
View Matthew's Profile

Stanislav Krasnoyarov

React Native Developer
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 ... Read More
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. Read Less
React NativeObjective-CAnsibleC+++7 More
View Stanislav's Profile

Johannes Stein

React Native Developer
Johannes is a highly skilled software engineer with extensive knowledge of JavaScript, web technologies, and cross-platform development. He is extremely ... Read More
Johannes is a highly skilled software engineer with extensive knowledge of JavaScript, web technologies, and cross-platform development. He is extremely passionate about open source software and is skilled in software architecture. Read Less
React NativeJavaScriptReactCoffeeScript+6 More
View Johannes's Profile

Richard Gill

React Native Developer
Richard is a full-stack developer with a broad and versatile coding skill set. He helps small businesses and startups quickly with prototypes and ideas b... Read More
Richard is a full-stack developer with a broad and versatile coding skill set. He helps small businesses and startups quickly with prototypes and ideas by building those things into reality quickly and efficiently. He has worked for 3 years at Goldman Sachs before moving to a hedge fund and then consulting for McKinsey Digital Labs. Read Less
React NativeJavaScriptReactNode.js
View Richard's Profile

Elijah Windsor

React Native Developer
Elijah is a highly motivated and skilled full-stack developer. He is passionate about building apps with React Native, React.js, Objective-C, and Node.js... Read More
Elijah is a highly motivated and skilled full-stack developer. He is passionate about building apps with React Native, React.js, Objective-C, and Node.js. He is able to deliver great user experiences for the web, iOS, and Android.  Read Less
React NativeJavaScriptObjective-CReact+9 More
View Elijah's Profile

Ante Lucic

React Native Developer
Ante has worked as a professional PHP developer since 2011 and has a bachelor’s degree in computer science. He loves challenges and solving all kinds of ... Read More
Ante has worked as a professional PHP developer since 2011 and has a bachelor’s degree in computer science. He loves challenges and solving all kinds of problems. He is a full-stack engineer, passionate about PHP, React, and Go.  Read Less
React NativePHPJavaScriptKohana+4 More
View Ante's Profile

Rinto Jose

React Native Developer
Rinto is a creative technology enthusiast and a full-stack developer with experience in JavaScript (focusing mainly on React, Angular), Node.js, Java, an... Read More
Rinto is a creative technology enthusiast and a full-stack developer with experience in JavaScript (focusing mainly on React, Angular), Node.js, Java, and other back-end technologies including Perl/Unix scripting and PL/SQL. Apart from being an active open source contributor, he derives great joy in learning new technologies and acquiring new skills. In addition, he has worked with a number of major IT companies. Read Less
React NativeJavaScriptJavaTypeScript 2+9 More
View Rinto's Profile

Arpit Agrawal

React Native Developer
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-siz... Read More
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. Read Less
React NativeJavaScriptPython 3Java+9 More
View Arpit's Profile

Juan Carlos del Valle

React Native Developer
Juan has an entrepreneurial spirit, as evidenced by him co-founding his own startup, but he also has a broad technical skillset so he's fantastic in the ... Read More
Juan has an entrepreneurial spirit, as evidenced by him co-founding his own startup, but he also has a broad technical skillset so he's fantastic in the role of a hands-on engineer. He's passionate about tech so he joined Toptal to look for interesting projects to work on. Juan enjoys developing software and researching new technologies and programming languages—ranging from the back-end to front-end and even microcontrollers for IoT projects.  Read Less
React NativeExpress.jsSails.js
View Juan's Profile

Felix Hessenberger

React Native Developer
Coming from an audio engineering and game development background, Felix takes an interdisciplinary approach to software engineering. After working full-s... Read More
Coming from an audio engineering and game development background, Felix takes an interdisciplinary approach to software engineering. After working full-stack in teams of all sizes and being the CTO of his own startup, he has valuable hands-on experience in many areas including DevOps, UI design, and project management. Read Less
React NativeJavaScriptJavaReact+4 More
View Felix's Profile

Giorgi Omiadze

React Native Developer
Giorgi has many years of working experience as a full-stack JavaScript developer. He has solid knowledge of web and mobile technologies such as React and... Read More
Giorgi has many years of working experience as a full-stack JavaScript developer. He has solid knowledge of web and mobile technologies such as React and React Native. Projects he has worked on include big applications with complex functionality that are used by thousands of users. Giorgi joined Toptal to find interesting projects for developing web and mobile applications. Read Less
React NativeJavaScriptNode.jsFirebase+5 More
View Giorgi's Profile

Ray Shih

React Native Developer
Ray is a well-educated and professional full-stack developer; working usually with JavaScript and Objective-C. He has experience with multiple product de... Read More
Ray is a well-educated and professional full-stack developer; working usually with JavaScript and Objective-C. He has experience with multiple product developments. He has worked with a variety of frameworks like RoR, ExpressJS, ReactJS/Flux, and CakePHP. He understands different programming paradigms including functional programming and TDD. He is a quick learner and communicates well. Read Less
React NativeJavaScriptReact
View Ray's Profile

Michael Ford

React Native Developer
Michael is a JavaScript developer based out of the UK. While comfortable on the full stack, he leans toward front-end development and currently works hea... Read More
Michael is a JavaScript developer based out of the UK. While comfortable on the full stack, he leans toward front-end development and currently works heavily with React, React Native, TypeScript, and Webpack with the aim of rapidly developing stable multi-platform applications. He’s worked with a large range of companies of different size and scope and has a passion for real-time data favoring databases like Firebase and RethinkDB. Read Less
React NativeJavaScriptCSSNode.js+5 More
View Michael's Profile

Kostas Familonidis

React Native Developer
Kostas is a passionate full-stack developer, most recently focused on cross-platform mobile app development but also experienced with a variety of other ... Read More
Kostas is a passionate full-stack developer, most recently focused on cross-platform mobile app development but also experienced with a variety of other projects and platforms, from business process automation to finance and beyond. Read Less
React NativeRubyJavaScriptRuby on Rails (RoR)+9 More
View Kostas's Profile

Chan Le

React Native Developer
Chan is a full-stack engineer with valuable experience developing scalable Open API systems. He has worked for easily recognizable companies such as Micr... Read More
Chan is a full-stack engineer with valuable experience developing scalable Open API systems. He has worked for easily recognizable companies such as Microsoft, Facebook, and Google, and has been participating in competitive programming since his early teens. He is friendly and confident, and will make a great addition to any development team. Read Less
React NativeJavaScriptReactJava+2 More
View Chan's Profile

Filip Petkovski

React Native Developer
Filip is a talented developer with excellent social and communication skills. He focuses on meeting his clients' demands at every possible level while de... Read More
Filip is a talented developer with excellent social and communication skills. He focuses on meeting his clients' demands at every possible level while delivering adaptable solutions and extensively tested code. The client's priorities are his priorities. Read Less
React NativePHPJavaScriptGit+4 More
View Filip's Profile

Alexander Gedevanishvili

React Native Developer
Alexander is an accomplished full-stack developer with eleven years of experience in web and software development. For the past six years, he has been wo... Read More
Alexander is an accomplished full-stack developer with eleven years of experience in web and software development. For the past six years, he has been working for a large telecommunication company as a senior software engineer. Alexander is passionate about Mobile development and has created several commercial and corporate applications. Read Less
React NativePHPJavaOracle PL/SQL+9 More
View Alexander's Profile

Michael Tkachuk

React Native Developer
Michael is a responsible, communicative, creative, and innovative person. He loves when he can get jobs done efficiently and in a rational way. He's alwa... Read More
Michael is a responsible, communicative, creative, and innovative person. He loves when he can get jobs done efficiently and in a rational way. He's always open to new ideas and discussions, and he respects other points of view while always trying to find win-win solutions for existing problems. Read Less
React NativeJavaScriptReactHTML5+9 More
View Michael's Profile

Andrej Adamcik

React Native Developer
Andrej is a software developer and architect. He has extensive experience with PHP, JavaScript, HTML, and CSS and enjoys working on both front-end and ba... Read More
Andrej is a software developer and architect. He has extensive experience with PHP, JavaScript, HTML, and CSS and enjoys working on both front-end and back-end. He likes creating modern websites and developing real-time scalable web applications with Node.js. Read Less
React NativePHPJavaScriptReact+9 More
View Andrej's Profile

Dino Trojak

React Native Developer
Dino loves building quality software and experimenting with new technologies. His language of choice is JavaScript. He believes in Agile practices and TD... Read More
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. Read Less
React NativeJavaScriptReactGit+3 More
View Dino's Profile

Anton Grishun

React Native Developer
Anton is a software engineer, passionate about computer science and programming. He excels at integrating reliable technologies and achieving business go... Read More
Anton is a software engineer, passionate about computer science and programming. He excels at integrating reliable technologies and achieving business goals. His strong experience makes him extremely capable on projects of any size. Read Less
React NativeJavaScriptREST APIsGit+5 More
View Anton's Profile

Nathan Broadbent

React Native Developer
Nathan has been developing web applications with Ruby on Rails since 2009, and iOS applications with Swift since 2015. He can pick up new programming lan... Read More
Nathan has been developing web applications with Ruby on Rails since 2009, and iOS applications with Swift since 2015. He can pick up new programming languages or frameworks very quickly, and is comfortable with a wide variety of technologies. He is passionate about solving problems with elegant and maintainable code and delivers high-quality work on time. Read Less
React NativeJavaScriptCoffeeScriptCSS+9 More
View Nathan's Profile

Jesus Dario

React Native Developer
Jesus Dario is co-founder of Yeti Smart Home and Scope.ink. He believes that software is just a means toward a great product, yet analyzes software anato... Read More
Jesus Dario is co-founder of Yeti Smart Home and Scope.ink. He believes that software is just a means toward a great product, yet analyzes software anatomy itself deeply. Culture over processes. He has consistently led software teams towards business goals, and he is an open source contributor and technical writer. Read Less
React NativeJavaScriptCSSExpress.js+4 More
View Jesus's Profile

Jeduan Cornejo

React Native Developer
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 ... Read More
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.  Read Less
React NativeJavaScriptNode.jsReact+2 More
View Jeduan's Profile

Stanisław Chmiela

React Native Developer
While Stanislaw is currently a university student, he has more than several years of experience working with code. He is a clever front-end iOS developer... Read More
While Stanislaw is currently a university student, he has more than several years of experience working with code. He is a clever front-end iOS developer with decent abilities on the back-end. He likes working on things that interact with people in some manner because then he gets to sees people become happier because of something that he's created. Read Less
React NativeReactCSSRuby on Rails (RoR)+1 More
View Stanisław's Profile

Li XiaoChen

React Native Developer
As a full-stack web developer and DevOps engineer, Li has over eight years of experience developing web and cross-platform apps and setting up Amazon/Azu... Read More
As a full-stack web developer and DevOps engineer, Li has over eight years of experience developing web and cross-platform apps and setting up Amazon/Azure hosting. He is extremely detail-oriented and has a deep understanding of technology that comes from intensely focusing and working on development projects. Read Less
React NativePHPJasmineJavaScript+9 More
View Li's Profile
Sign up now to see
more profiles.
Get Started

Hear From Our Clients

Hire React Native Developers Seamlessly with 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.

Tap Into World‑Class Talent

Trusted Experts Only
All of our talent are seasoned experts who ramp up quickly, readily contribute as core team members, and work with you to minimize onboarding time.
Your New Team Member
We are so sure you will love your new team member, than you can try working with them for a few days. Pay only if satisfied.
Scale as Needed
Hire talent within 48 hours. Scale your team up or down exactly when you need it, no strings attached.
Seamless Hiring
We handle all aspects of billing, payments and NDA's. Let us take care of the overhead while you focus on building great products.
Flexible Engagements
Choose the engagement type that suits your needs – hourly, part-time, or full-time – with the ability to change anytime.
Expert Talent Matcher
Focus on your project and enjoy support from your dedicated account executive and expert talent matcher.

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.

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 a React Native developer.

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 developer is proficient with JavaScript and especially with the ES6 syntax.

Many of the questions in our React hiring guide apply when hiring a React Native developer as well, so it is better to keep both guides in mind at the time of interview. Of course, the JavaScript hiring guide also applies: As the guide mentions, there’s a big difference between having some understanding of JavaScript 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 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/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, 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 Developer Candidate

The answers to these questions should give you an idea of how much a developer 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—there’s much more both to React Native development and to app development in general. For example, somebody 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 developer. Your mileage may vary, as with everything else in life. Good luck!