Creazione del primo progetto Expo
Utilizzi `npx create-expo-app` per creare lo scheletro di un nuovo progetto, esplori i file generati e comprenda l’entry point di un’applicazione React Native.
Creazione del primo progetto Expo è una lezione React Native Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento React Native Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso React Native Academy include 4 lezioni in totale.
Parti di questa lezione non sono ancora state tradotte e vengono mostrate in inglese.
The create-expo-app Command
The easiest start is npx create-expo-app MyApp. It grabs the latest template, sets up folders, and installs everything. Add a template flag to start blank or with navigation.
# Create a new Expo project
npx create-expo-app MyFirstApp
# Create with a blank TypeScript template
npx create-expo-app MyFirstApp --template blank-typescript
# Create with tabs navigation template
npx create-expo-app MyFirstApp --template tabs
# Move into the project
cd MyFirstAppGenerated Folder Structure Overview
Get to know your new folders. App.js is the entry point React renders first, app.json holds your config, and assets/ stores images and fonts. The code maps it all out.
MyFirstApp/
├── App.js # Root component (entry point)
├── app.json # Expo configuration
├── package.json # NPM dependencies & scripts
├── babel.config.js # Babel transpiler config
├── assets/ # Images, fonts, icons
│ ├── icon.png
│ ├── splash.png
│ └── adaptive-icon.png
└── node_modules/ # Installed packagesThe app.json Configuration File
app.json is your project's config hub — app name, version, icons, splash screen, and per-platform settings for iOS and Android. Changing it needs a rebuild, not a hot reload.
{
'expo': {
'name': 'My First App',
'slug': 'my-first-app',
'version': '1.0.0',
'orientation': 'portrait',
'icon': './assets/icon.png',
'splash': {
'image': './assets/splash.png',
'resizeMode': 'contain',
'backgroundColor': '#ffffff'
},
'ios': {
'bundleIdentifier': 'com.yourname.myfirstapp'
},
'android': {
'package': 'com.yourname.myfirstapp'
}
}
}The package.json and Scripts
package.json lists your dependencies and scripts. The defaults — start, ios, android, web — launch your app in different places. You can add your own scripts too.
// package.json (excerpt)
{
'name': 'my-first-app',
'version': '1.0.0',
'main': 'node_modules/expo/AppEntry.js',
'scripts': {
'start': 'expo start',
'android': 'expo start --android',
'ios': 'expo start --ios',
'web': 'expo start --web'
},
'dependencies': {
'expo': '~50.0.0',
'react': '18.2.0',
'react-native': '0.73.x'
}
}Understanding App.js — The Root Component
App.js exports the root component React Native renders first — every other component lives inside it. It's the first file you'll edit, like index.html in a web project.
import { StatusBar } from 'expo-status-bar';
import { StyleSheet, Text, View } from 'react-native';
export default function App() {
return (
<View style={styles.container}>
<Text>Open up App.js to start working!</Text>
<StatusBar style='auto' />
</View>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: '#fff',
alignItems: 'center',
justifyContent: 'center',
},
});JSX: Describing UI in JavaScript
JSX lets you write HTML-like markup inside JavaScript to describe your UI. It's not HTML though — use style instead of class, onPress instead of onclick. The code shows it.
import { View, Text } from 'react-native';
const name = 'World';
const count = 42;
export default function App() {
return (
<View>
{/* This is a JSX comment */}
<Text>Hello, {name}!</Text>
<Text>You have {count} messages.</Text>
{count > 0 && <Text>You have unread items.</Text>}
</View>
);
}Babel and Transpilation
Expo uses Babel to translate modern JavaScript and JSX into code each platform can run. You rarely touch its config — mainly to add handy path aliases like @/components.
// babel.config.js (default Expo config)
module.exports = function(api) {
api.cache(true);
return {
presets: ['babel-preset-expo'],
plugins: [
// Example: add module resolver for clean imports
[
'module-resolver',
{
root: ['./'],
alias: {
'@components': './components',
'@screens': './screens',
},
},
],
],
};
};Installing Additional Dependencies
To add packages, prefer npx expo install over npm install — it picks the version that matches your Expo SDK, avoiding subtle mismatch bugs. Plain npm is fine for pure-JS packages.
# Use expo install for SDK-compatible packages
npx expo install expo-camera expo-location
npx expo install react-native-maps
# Use npm install for pure JS packages
npm install lodash date-fns
# Check for outdated Expo SDK packages
npx expo install --check
# Fix version mismatches
npx expo install --fixMaking Your First Code Change
Open App.js, change the text, and save — Fast Refresh updates your app in under a second while keeping its state. Try tweaking a color to see instant feedback. ✨
// Modified App.js
import { StyleSheet, Text, View } from 'react-native';
export default function App() {
return (
<View style={styles.container}>
<Text style={styles.title}>Hello, React Native!</Text>
<Text style={styles.subtitle}>I made my first change.</Text>
</View>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: '#f0f4ff',
alignItems: 'center',
justifyContent: 'center',
},
title: { fontSize: 24, fontWeight: 'bold', color: '#333' },
subtitle: { fontSize: 16, color: '#666', marginTop: 8 },
});The Expo SDK and Managed Workflow
The Expo SDK gives you ready-made modules for camera, location, sensors, and more. In the managed workflow Expo handles native code for you — simpler, but limited to SDK APIs.
// Example: using Expo SDK modules
import * as Battery from 'expo-battery';
import * as Haptics from 'expo-haptics';
async function checkBattery() {
const level = await Battery.getBatteryLevelAsync();
console.log('Battery level:', level); // 0.0 - 1.0
}
async function vibrate() {
await Haptics.notificationAsync(
Haptics.NotificationFeedbackType.Success
);
}TypeScript Support in Expo
Expo has first-class TypeScript support. Start with the blank-typescript template, or rename App.js to App.tsx. TypeScript catches type errors early and sharpens autocomplete.
// App.tsx with TypeScript
import React from 'react';
import { StyleSheet, Text, View } from 'react-native';
interface Props {
greeting?: string;
}
export default function App({ greeting = 'Hello' }: Props) {
const message: string = greeting + ', TypeScript!';
return (
<View style={styles.container}>
<Text>{message}</Text>
</View>
);
}
const styles = StyleSheet.create({
container: { flex: 1, alignItems: 'center', justifyContent: 'center' },
});Quick Check
Test your understanding of React Native Mobile Development concepts from this lesson.
Lesson Recap
You scaffolded your first app: create-expo-app builds a full project instantly, app.json controls its settings, and Fast Refresh shows edits live. Next: running on devices! 🚀
Domande Frequenti
La lezione «Creazione del primo progetto Expo» è gratuita?
Sì — il testo completo di «Creazione del primo progetto Expo» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso React Native Academy, passa a CoddyKit PRO. Il corso React Native Academy include 4 lezioni in totale.
Cosa imparerò in «Creazione del primo progetto Expo»?
Utilizzi `npx create-expo-app` per creare lo scheletro di un nuovo progetto, esplori i file generati e comprenda l’entry point di un’applicazione React Native. Eserciti React Native Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare React Native Academy?
Non è richiesta alcuna esperienza precedente. React Native Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.
Quanto tempo richiede la lezione «Creazione del primo progetto Expo»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione React Native Academy?
Sì. Ogni lezione React Native Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Installazione di Node, Expo CLI e simulatori
- Creazione del primo progetto Expo
- Esecuzione su dispositivo ed emulatore
- Comprensione della struttura del progetto