Guía 12: React y MUI - Introducción#
Actividades previas#
Open-Meteo#
Explore la documentación de la API de Open-Meteo para comprender cómo se realizan las solicitudes para obtener datos meteorológicos.
Practique haciendo solicitudes a la API utilizando herramientas como cURL o desde una pestaña en su navegador.
Diseño del dashboard#
Identifique los elementos claves del API que serán útiles para el dashboard:
Parámetros de entrada (Input): Determine qué parámetros son necesarios para realizar una solicitud a la API, como ubicación geográfica o zona horaria.
Datos disponibles (Variables climáticas): Explore las variables climáticas que la API puede proporcionar y su frecuencia temporal, como temperatura actual, por día o por hora, etc.
Formato de respuesta (Response): Familiarícese con el formato de respuesta de la API, que generalmente es JSON, y cómo se estructuran los datos.
Codificación del clima (weathercode): Comprenda cómo se codifica el clima en la respuesta de la API, lo que le permitirá interpretar correctamente las condiciones climáticas.
Errores comunes: Identifique la respuesta de la API para los errores más comunes, como solicitudes mal formadas o problemas de conexión.
Casos de uso para el dashboard: Reflexione sobre cómo estos datos pueden ser utilizados en el dashboard, como mostrar el clima actual, pronósticos extendidos, gráficos de evolución, alertas visuales, etc.
Clima actual: temperatura, humedad, estado del cielo
Gráficos de evolución: temperatura por hora, precipitación acumulada
Pronósticos extendidos: próximos 7 días
Alertas visuales: si uv_index_max supera cierto umbral, mostrar advertencia
Íconos adaptativos: usando weathercode
Responda a la actividad en clases del diseño generado.
Ambiente de desarrollo#
Cree un repositorio en GitHub con el nombre dashboard.
Agregue un archivo README.md con el título de su dashboard y una breve descripción del objetivo de su proyecto.
Agregue un archivo .gitignore con la plantilla de Node.
Acceda a su proyecto dashboard en Codespaces o en su máquina local.
Cree y utilice la(s) rama(s) de desarrollo.
Actividades en clases#
React: Inicialización del proyecto#
Explore la documentación de React para comprender los conceptos básicos de esta biblioteca.
Cree un proyecto de React utilizando Vite.
Dentro de la carpeta de su proyecto, abra la terminal y cree un nuevo proyecto de Vite con el siguiente comando:
npm create vite@latest .
Seleccione el framework como React y la variante como TypeScript.
Instale las dependencias del proyecto e inicie el servidor de desarrollo con los siguientes comandos:
npm install npm run dev
Compruebe la vista previa del resultado en el navegador.
Con un cliente de IAG, explique la estructura del proyecto en React, específicamente por el propósito de los archivos index.html, src/main.tsx y src/App.tsx.
React: App.tsx#
Modifique el archivo src/App.tsx para mostrar un mensaje de bienvenida, por ejemplo:
... function App() { return ( <div> <h1>Bienvenido al Dashboard</h1> </div> ); } export default App;
Compruebe la vista previa del resultado en el navegador.
Utilice un cliente de IAG, para explicar cómo se renderiza el componente principal de la aplicación y JSX.
MUI: Inicialización del proyecto y componente Grid#
Explore la documentación de MUI para comprender cómo integrar esta biblioteca en su proyecto de React.
Instale MUI y sus dependencias en su proyecto de React con el siguiente comando:
npm install @mui/material @emotion/react @emotion/styled
Importe el componente Grid de MUI en su archivo src/App.tsx y utilícelo para crear una estructura básica de cuadrícula para su dashboard:
... import { Grid } from '@mui/material'; function App() { return ( <Grid> {/* Encabezado */} <Grid>Elemento: Encabezado</Grid> {/* Alertas */} <Grid>Elemento: Alertas</Grid> {/* Selector */} <Grid>Elemento: Selector</Grid> {/* Indicadores */} <Grid>Elemento: Indicadores</Grid> {/* Gráfico */} <Grid>Elemento: Gráfico</Grid> {/* Tabla */} <Grid>Elemento: Tabla</Grid> {/* Información adicional */} <Grid>Elemento: Información adicional</Grid> </Grid> ); } export default App;
Compruebe la vista previa del resultado en el navegador.
Con un cliente de IAG, explique cómo se utiliza el componente Grid de MUI para crear una estructura de cuadrícula y cómo se pueden agregar elementos dentro de esta cuadrícula.
MUI: Ubicación de elementos y Responsividad#
Modifique el componente Grid de su archivo src/App.tsx:
Para que sea un contenedor principal utilizando el prop container.
Ajuste el espaciado de 5 unidades entre los elementos utilizando la propiedad spacing.
Centre los todos los elementos con utilizando las propiedades justifyContent y alignItems.
Compruebe la vista previa del resultado en el navegador.
... function App() { return ( <Grid container spacing={5} sx={{ justifyContent: "left", alignItems: "center" }}> ... </Grid> ); }
Revise la documentación de fluid grids en MUI, para aplicar el estilo:
Pantallas extra pequeñas xs, todos los elementos ocupan 12 columnas.
Pantallas medianas md, en adelante:
El encabezado ocupe todo el ancho (12 columnas),
Las alertas ocupan 12 columnas.
El selector ocupa 3 columnas y los indicadores ocupan 9 columnas.
El gráfico ocupa 6 columnas y la tabla ocupa 6 columnas.
El elemento de información adicional ocupan 12 columnas.
Compruebe la vista previa del resultado en el navegador.
Ver el código
... function App() { return ( <Grid ... > {/* Encabezado */} <Grid size={{ xs: 12, md: 12 }}>Elemento: Encabezado</Grid> ... {/* Selector */} <Grid size={{ xs: 12, md: 3 }}>Elemento: Selector</Grid> {/* Indicadores */} <Grid size={{ xs: 12, md: 9 }}>Elemento: Indicadores</Grid> ... </Grid> ); } export default App;
Revise la documentación de la propiedad sx, para que la gráfica y la tabla no se muestran en pantallas extra pequeñas y se muestran como bloque desde pantallas medianas.
Ver el código
... function App() { return ( <Grid ... > ... {/* Gráfico */} <Grid ... sx={{ display: { xs: "none", md: "block"} }} > Elemento: Gráfico </Grid> {/* Tabla */} <Grid ... sx={{ display: { xs: "none", md: "block" } }}> Elemento: Tabla </Grid> ... </Grid> ); } export default App;
Compruebe la vista previa del resultado en el navegador para diferentes tamaños.
Consulte su cliente de IAG para explicar la utilidad de los props en los componentes, por ejemplo size y sx.
Versionamiento#
Versione local y remotamente la(s) rama(s) de desarrollo en el repositorio dashboard.
Genere la(s) solicitud(es) de cambios (pull request) para la rama principal y apruebe los cambios.
Configuración para el despliegue#
Desde la línea de comandos:
Instale el paquete gh-pages
npm install gh-pages --save-dev
Modifique el archivo package.json, con:
La entrada homepage. Reemplace <username> por su nombre de usuario.
Los comandos predeploy y deploy a la entrada scripts.
{ ... "homepage": "https://<username>.github.io/dashboard", ... "scripts": { ... "predeploy": "npm run build", "deploy": "gh-pages -d dist", ... } }
Modifique el archivo vite.config.js, con la ruta al repositorio remoto:
export default defineConfig({ base: "/dashboard/", plugins: ... , })
Desde la línea de comandos, ejecute el comando de transpilación y despliegue del sitio web, con:
npm run deploy
De ser necesario, elimine, corrija o comente las secciones de código identificadas por el transpilador.
Vuelva a ejecutar el comando de transpilación y despliegue del sitio web.
Compruebe el resultado en el navegador, con la URL: https://<username>.github.io/dashboard
Conclusiones#
Actividades autónomas#
Recursos extras#
En redes:
Today we're sharing that View Transitions and Activity are ready to try in the experimental channel, along with docs and updates on other areas we're actively working on:https://t.co/nQqndWzbdX
— React (@reactjs) April 23, 2025