Dificultad
intermediate
Duración promedio
1 hrs
Tecnologías
Typescript
react native
React Navigation
zustand
Dificultad
intermediate
Duración promedio
1 hrs
Tecnologías
Typescript
react native
React Navigation
zustand
La arquitectura modular es una forma de organizar el código que divide una aplicación en módulos independientes o “features”, cada uno con su propia lógica, pantallas, estado y componentes.
Este proyecto te enseña a estructurar una app de React Native, de manera escalable, mantenible y profesional. El objetivo no es empezar desde cero, sino aprender a ordenar correctamente una app real mientras implementas dos features clave:
Clona el siguiente template en tu computadora, abrelo y asegúrate de que compila:
1git clone https://github.com/4GeeksAcademy/react-native-cli-advanced 2npm install 3npm run android
o
1npm run ios
Si todo esta bien, deberías ver:

💡 Importante: Recuerda guardar y subir tu código a GitHub creando un nuevo repositorio, actualizando el remoto (
git remote set-url origin <your new url>) y subiendo el código a tu nuevo repositorio usando los comandosadd,commitypushdesde la terminal de git.
Explora la arquitectura y revisa los archivos existentes: src/features/movies/, src/features/categories/, src/shared/lib/movies.ts, src/navigation/StackNavigator.tsx, src/navigation/feature-registry.ts.
Hazte estas preguntas:
features y qué va en shared?Crea la pantalla de películas por categoría src/features/categories/screens/CategoryMoviesScreen.tsx. La idea es que cuando el usuario toque una categoría en CategoriesScreen, debe navegar a CategoryMoviesScreen y ver solo las películas de esa categoría.
Gestionar favoritos con Zustand src/features/movies/store/movies.store.ts. Debes permitir que el usuario marque o desmarque películas como favoritas. Fijate en el archivo store que ya tienes un codigo pre-hecho.
La idea es que lo conectes en MovieDetailScreen. Obteniendo el id:
1const { id } = route.params;
El estado del store:
1const { toggleFavorite, isFavorite } = useMoviesStore();
Y creando un botón para favoritos:
1<Button 2title={isFavorite(id) ? 'Remove from favorites' : 'Add to favorites'} 3onPress={() => toggleFavorite(id)} 4/>
Gestiona el store de categorías src/features/categories/store/categories.store.ts. La idea es que implementes un estado simple:
1activeCategory: string | null; 2setActiveCategory: (category: string) => void;
Puedes usarlo para resaltar visualmente la categoría activa.
1navigation.navigate('CategoryMovies', { category: 'Sci-Fi' });
En CategoryMoviesScreen, obtén la categoría:
1const { category } = route.params;
1const filtered = getMoviesByCategory(category);
Renderiza un listado con FlatList reutilizando MovieCard de forma que al tocar una película, debe navegar al detalle.
Dificultad
intermediate
Duración promedio
1 hrs
Tecnologías
Typescript
react native
React Navigation
zustand
Dificultad
intermediate
Duración promedio
1 hrs
Tecnologías
Typescript
react native
React Navigation
zustand
Dificultad
intermediate
Duración promedio
1 hrs
Tecnologías
Typescript
react native
React Navigation
zustand
Dificultad
intermediate
Duración promedio
1 hrs
Tecnologías
Typescript
react native
React Navigation
zustand
Dificultad
intermediate
Duración promedio
1 hrs
Tecnologías
Typescript
react native
React Navigation
zustand
Dificultad
intermediate
Duración promedio
1 hrs
Tecnologías
Typescript
react native
React Navigation
zustand