Back to Blog
Getting Started with React Native and Expo in 2024

Getting Started with React Native and Expo in 2024

A comprehensive guide to building mobile apps with React Native and Expo, covering the latest features and best practices.


Getting Started with React Native and Expo in 2024


React Native combined with Expo has become one of the most powerful and developer-friendly ways to build mobile applications. In this comprehensive guide, we'll explore how to get started with React Native and Expo, covering everything from setup to deployment.


Why Choose React Native and Expo?


React Native allows you to build mobile apps using JavaScript and React, while Expo provides a set of tools and services that make the development process much smoother.


Key Benefits


- **Cross-platform development**: Write once, run on both iOS and Android

- **Hot reloading**: See changes instantly during development

- **Rich ecosystem**: Access to thousands of packages and libraries

- **Native performance**: Direct access to native APIs and components

- **Expo managed workflow**: Simplified development and deployment process


Setting Up Your Development Environment


Before we start building our first app, let's set up the development environment.


Prerequisites


Code block placeholder

Install Node.js (version 16 or higher)

node --version


Install Expo CLI globally

npm install -g @expo/cli

Code block placeholder

Creating Your First Project


Code block placeholder

Create a new Expo project

npx create-expo-app MyFirstApp --template


Navigate to the project directory

cd MyFirstApp


Start the development server

npx expo start

Code block placeholder

Project Structure


A typical Expo project has the following structure:


Code block placeholder

MyFirstApp/

├── app/

│ ├── (tabs)/

│ │ ├── index.tsx

│ │ └── explore.tsx

│ ├── +not-found.tsx

│ └── _layout.tsx

├── components/

├── constants/

├── assets/

├── package.json

└── app.json

Code block placeholder

Building Your First Component


Let's create a simple component to understand the basics:


Code block placeholder

import React from 'react';

import { View, Text, StyleSheet, TouchableOpacity } from 'react-native';


interface ButtonProps {

title: string;

onPress: () => void;

}


export default function CustomButton({ title, onPress }: ButtonProps) {

return (

<TouchableOpacity style={styles.button} onPress={onPress}>

<Text style={styles.buttonText}>{title}</Text>

</TouchableOpacity>

);

}


const styles = StyleSheet.create({

button: {

backgroundColor: '#007AFF',

paddingHorizontal: 20,

paddingVertical: 12,

borderRadius: 8,

alignItems: 'center',

},

buttonText: {

color: 'white',

fontSize: 16,

fontWeight: '600',

},

});

Code block placeholder

Navigation with Expo Router


Expo Router provides file-based routing for React Native apps:


Code block placeholder

// app/_layout.tsx

import { Stack } from 'expo-router';


export default function RootLayout() {

return (

<Stack>

<Stack.Screen name="index" options={{ title: 'Home' }} />

<Stack.Screen name="profile" options={{ title: 'Profile' }} />

</Stack>

);

}

Code block placeholder

Best Practices


Performance Optimization


1. **Use FlatList for large lists**

2. **Optimize images with proper sizing**

3. **Implement lazy loading for screens**

4. **Use React.memo for expensive components**


Code Organization


1. **Follow consistent file naming conventions**

2. **Separate business logic from UI components**

3. **Use TypeScript for better type safety**

4. **Implement proper error boundaries**


Testing Your App


Testing is crucial for maintaining app quality:


Code block placeholder

// Example test with Jest and React Native Testing Library

import { render, fireEvent } from '@testing-library/react-native';

import CustomButton from '../components/CustomButton';


describe('CustomButton', () => {

it('should call onPress when pressed', () => {

const mockOnPress = jest.fn();

const { getByText } = render(

<CustomButton title="Test Button" onPress={mockOnPress} />

);


fireEvent.press(getByText('Test Button'));

expect(mockOnPress).toHaveBeenCalled();

});

});

Code block placeholder

Deployment


Building for Production


Code block placeholder

Build for iOS

eas build --platform ios


Build for Android

eas build --platform android


Build for both platforms

eas build --platform all

Code block placeholder

App Store Submission


1. Configure app.json with proper metadata

2. Generate app icons and splash screens

3. Test on physical devices

4. Submit through EAS Submit or manually


Conclusion


React Native and Expo provide an excellent foundation for mobile app development. With the managed workflow, you can focus on building great user experiences without worrying about complex native configurations.


The ecosystem continues to evolve, with new features and improvements being added regularly. Whether you're building a simple prototype or a complex production app, React Native and Expo offer the tools and flexibility you need.


Next Steps


- Explore the [Expo documentation](https://docs.expo.dev/)

- Try building a more complex app with navigation and state management

- Learn about native modules and custom development builds

- Contribute to the React Native community


Happy coding! 🚀