Proyecto Integrador - Dashboard de Clima
Volver a clases
Frontend Development●●Intermedio

Proyecto Integrador - Dashboard de Clima

120 min
0 vistas

Construir un dashboard con API externa, debounce y almacenamiento local.

Alcance del proyecto

  • Búsqueda de ciudades con debounce y resultados persistentes.
  • Consumo de API externa con manejo de loading y error.
  • Lista de favoritos con localStorage.

Arquitectura recomendada

  • hooks/ para useWeather, useDebounce, useLocalStorage.
  • components/ para UI reutilizable (SearchBar, WeatherCard, Loader).

Flujo de datos

  • El usuario escribe una ciudad, se debouncea y se consulta la API.
  • Se renderiza la tarjeta con datos y se guarda en favoritos.

Ejemplos de Código

3 ejemplos

Hook de API externa

javascript
1import { useEffect, useState } from "react";
2
3export function useWeather(ciudad) {
4  const [data, setData] = useState(null);
5  const [loading, setLoading] = useState(false);
6  const [error, setError] = useState(null);
7
8  useEffect(() => {
9    if (!ciudad) return;
10
11    const controller = new AbortController();
12
13    const cargar = async () => {
14      try {
15        setLoading(true);
16        setError(null);
17        const res = await fetch(
18          `https://api.openweathermap.org/data/2.5/weather?q=${ciudad}&appid=API_KEY&units=metric&lang=es`,
19          { signal: controller.signal }
20        );
21        if (!res.ok) throw new Error("Ciudad no encontrada");
22        setData(await res.json());
23      } catch (err) {
24        if (err.name !== "AbortError") setError(err.message);
25      } finally {
26        setLoading(false);
27      }
28    };
29
30    cargar();
31    return () => controller.abort();
32  }, [ciudad]);
33
34  return { data, loading, error };
35}

Input controlado

javascript
1import { useState } from "react";
2
3export function SearchBar({ onSearch }) {
4  const [input, setInput] = useState("");
5
6  const submit = (e) => {
7    e.preventDefault();
8    if (input.trim()) onSearch(input.trim());
9  };
10
11  return (
12    <form onSubmit={submit}>
13      <input
14        value={input}
15        onChange={(e) => setInput(e.target.value)}
16        placeholder="Buscar ciudad"
17      />
18      <button type="submit">Buscar</button>
19    </form>
20  );
21}

Loading y error

javascript
1function EstadoUI({ loading, error }) {
2  if (loading) return <p>Cargando...</p>;
3  if (error) return <p>Error: {error}</p>;
4  return null;
5}

Recursos

3 recursos disponibles

Taller Práctico

TallerIntermedio15 min

Brief del proyecto

Proyecto

Construir un dashboard de clima con búsqueda, favoritos, y detalles de temperatura.

Taller Práctico

TallerIntermedio15 min

Checklist de funcionalidades

Recurso

(1) Debounce, (2) API externa, (3) persistencia, (4) estados de carga, (5) responsive.

Documentación Oficial

DocumentaciónPrincipiante15 min

OpenWeather API

Documentación oficial para consultar clima.

ALVESC ACADEMY - Plataforma Educativa