In this chapter, learn how to create a new Expo project.
In this chapter, let's learn how to create a new Expo project and how to get it running.
Watch: Creating your first universal Expo app
PrerequisitesWe'll need the following to get started:
The tutorial assumes that you are familiar with TypeScript and React. If you are not familiar with them, check out the TypeScript Handbook and React's official tutorial.
1
Initialize a new Expo appWe'll use create-expo-app
to initialize a new Expo app. It is a command line tool to create a new React Native project. Run the following command in your terminal:
# Create a project named StickerSmash
-Â
npx create-expo-app@latest StickerSmash
# Navigate to the project directory
-Â
cd StickerSmash
This command will create a new project directory named StickerSmash, using the default template. This template has essential boilerplate code and libraries needed to build our app, including Expo Router. We'll continue to add more libraries throughout this tutorial as needed.
Benefits of using the default templateexpo
package installed3
Run reset-project scriptIn this tutorial, we'll build our app from scratch and understand the fundamentals of adding a file-based navigation. Let's run the reset-project
script to remove the boilerplate code:
After running the above command, there are two files (index.tsx and _layout.tsx) left inside the app directory. The previous files from app and other directories (components, constants, and hooks â containing boilerplate code) are moved inside the app-example directory by the script. We'll create our own directories and component files as we go along.
What does thereset-project
script do?
reset-project
script resets the app directory structure in a project and copies the previous boilerplate files from the project's root directory to another sub-directory called app-example. We can delete it since it is not part of our main app's structure.
4
Run the app on mobile and webIn the project directory, run the following command to start the development server from the terminal:
After running the above command:
Once it is running on all platforms, the app should look like this:
5
Edit the index screenThe app/index.tsx file defines the text displayed on the app's screen. It is the entry point of our app and executes when the development server starts. It uses core React Native components such as <View>
and <Text>
to display background and text.
Styles applied to these components use JavaScript objects rather than CSS, which is used on web. However, a lot of the properties will look familiar if you've previously used CSS on web. Most React Native components accept a style
prop that accepts a JavaScript object as its value. For more details, see Styling in React Native.
Let's modify app/index.tsx screen:
StyleSheet
from react-native
and create a styles
object to define our custom styles.styles.container.backgroundColor
property to <View>
with the value of #25292e
. This changes the background color.<Text>
with "Home screen".styles.text.color
property to <Text>
with the value of #fff
(white) to change the text color.
import { Text, View, StyleSheet } from 'react-native'; export default function Index() { return ( <View style={styles.container}> <Text style={styles.text}>Home screen</Text> </View> ); } const styles = StyleSheet.create({ container: { flex: 1, backgroundColor: '#25292e', alignItems: 'center', justifyContent: 'center', }, text: { color: '#fff', }, });
React Native uses the same color format as the web. It supports hex triplets (this is what
#fff
is),rgba
,hsl
, and named colors, such asred
,green
,blue
,peru
, andpapayawhip
. For more information, see Colors in React Native.
This change will reflect on all platforms automatically:
SummaryChapter 1: Create your first app
We've successfully created a new Expo project, used React Native core components, and are ready to develop our StickerSmash app.
Mark this chapter as read
In the next chapter, we will learn how to add a stack and a tab navigator to our app.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4