0Pricing
React Native Academy · Lección

Creación de su primer proyecto de Expo

Utilice `npx create-expo-app` para crear la estructura inicial de un proyecto nuevo, explore los archivos generados y comprenda el punto de entrada de una aplicación de React Native.

Creación de su primer proyecto de Expo es una lección gratuita de React Native Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de React Native Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de React Native Academy incluye 4 lecciones en total.

El comando create-expo-app

La forma más fácil de empezar es con npx create-expo-app MyApp. Descarga la plantilla más reciente, configura las carpetas e instala todo. Añade una flag de plantilla para empezar con un proyecto en blanco o con navegación.

# 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 MyFirstApp

Descripción de la estructura de carpetas generada

Familiarízate con tus nuevas carpetas. App.js es el punto de entrada que React renderiza primero, app.json guarda tu configuración y assets/ almacena imágenes y fuentes. El código lo explica todo.

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 packages

El archivo de configuración app.json

app.json es el centro de configuración de tu proyecto: nombre de la app, versión, iconos, pantalla de inicio y ajustes específicos para iOS y Android. Cambiarlo requiere una reconstrucción, no un 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'
    }
  }
}

package.json y los scripts

package.json lista tus dependencias y scripts. Los predeterminados — start, ios, android, web — inician tu app en diferentes entornos. También puedes añadir tus propios scripts.

// 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'
  }
}

Entendiendo App.js: el componente raíz

App.js exporta el componente raíz que React Native renderiza primero; todos los demás componentes viven dentro de él. Es el primer archivo que editarás, como index.html en un proyecto web.

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: Describiendo la UI en JavaScript

JSX te permite escribir marcado similar a HTML dentro de JavaScript para describir tu interfaz de usuario. Sin embargo, no es HTML: usa style en lugar de class, onPress en lugar de onclick. El código lo muestra.

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 y la transpilación

Expo usa Babel para traducir JavaScript moderno y JSX a código que cada plataforma pueda ejecutar. Rara vez modificarás su configuración, principalmente para añadir aliases de ruta útiles como @/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',
          },
        },
      ],
    ],
  };
};

Instalando dependencias adicionales

Para añadir paquetes, prefiere npx expo install en lugar de npm install: selecciona la versión que coincide con tu Expo SDK, evitando errores sutiles de incompatibilidad. El npm normal está bien para paquetes solo de JS.

# 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 --fix

Haciendo tu primer cambio de código

Abre App.js, cambia el texto y guarda: Fast Refresh actualiza tu app en menos de un segundo manteniendo su estado. Intenta ajustar un color para ver la retroalimentación instantánea. ✨

// 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 },
});

El Expo SDK y el flujo de trabajo gestionado

El Expo SDK te proporciona módulos preconfigurados para cámara, ubicación, sensores y más. En el flujo de trabajo gestionado (managed workflow), Expo maneja el código nativo por ti, más simple, pero limitado a las APIs del SDK.

// 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
  );
}

Soporte de TypeScript en Expo

Expo tiene soporte de primera clase para TypeScript. Empieza con la plantilla blank-typescript, o renombra App.js a App.tsx. TypeScript detecta errores de tipo tempranamente y mejora el autocompletado.

// 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' },
});

Verificación rápida

Pon a prueba tu comprensión de los conceptos de desarrollo móvil con React Native de esta lección.

Resumen de la lección

Has configurado tu primera app: create-expo-app construye un proyecto completo al instante, app.json controla su configuración y Fast Refresh muestra los cambios en vivo. Siguiente: ¡ejecutar en dispositivos! 🚀

Preguntas frecuentes

¿La lección «Creación de su primer proyecto de Expo» es gratis?

Sí — el texto completo de «Creación de su primer proyecto de Expo» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de React Native Academy, actualiza a CoddyKit PRO. El curso de React Native Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Creación de su primer proyecto de Expo»?

Utilice `npx create-expo-app` para crear la estructura inicial de un proyecto nuevo, explore los archivos generados y comprenda el punto de entrada de una aplicación de React Native. Practicas React Native Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar React Native Academy?

No se requiere experiencia previa. React Native Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.

¿Cuánto tiempo toma la lección «Creación de su primer proyecto de Expo»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de React Native Academy?

Sí. Cada lección de React Native Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Instalación de Node, Expo CLI y simuladores
  2. Creación de su primer proyecto de Expo
  3. Ejecución en dispositivos y emuladores
  4. Comprensión de la estructura del proyecto
← Volver a React Native Academy