Skip to content

Meme Generator es una aplicación web de una sola página (SPA) desarrollada en React que permite a los usuarios crear memes personalizados de manera sencilla e interactiva.

Notifications You must be signed in to change notification settings

Seb-RM/React_Side_Effects-Meme-Generator

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🎯 Meme Generator

Version License React Vite

📖 Descripción Breve

Meme Generator es una aplicación web de una sola página (SPA) desarrollada en React que permite a los usuarios crear memes personalizados de manera sencilla e interactiva. La aplicación extrae imágenes de memes de la API de Imgflip, permitiendo a los usuarios seleccionar una imagen aleatoria y agregar texto superior e inferior para generar su propio meme.

✨ Características Principales

  • 🎲 Selección Aleatoria de Imágenes: Accede a una amplia biblioteca de memes desde la API de Imgflip.
  • ✏️ Edición de Texto: Agrega texto superior e inferior con estilos impactantes (fuente Impact, sombras, mayúsculas).
  • 🔄 Interfaz Reactiva: Actualización en tiempo real del meme a medida que editas el texto.
  • 📱 Responsive Design: Optimizado para dispositivos móviles y de escritorio.
  • Rendimiento Rápido: Construido con Vite para un desarrollo y carga eficientes.
  • 🎨 Estilos Personalizados: Diseño moderno con gradientes y efectos visuales atractivos.

🖼️ Demo/Vistas Previas

Meme Generator Preview

Vista previa de la aplicación en funcionamiento, mostrando un meme generado con texto personalizado.

Para una demo en vivo, ejecuta la aplicación localmente o visita la demo en vivo.

🛠️ Tecnologías Utilizadas

Tecnología Versión Propósito
React 19.1.1 Biblioteca para construir interfaces de usuario
React DOM 19.1.1 Renderizado de React en el DOM
Vite 7.1.7 Herramienta de construcción rápida para desarrollo web
ESLint 9.36.0 Linting para mantener código limpio
CSS3 3 Estilos personalizados con flexbox y grid

🚀 Instalación y Configuración

Prerrequisitos

  • Node.js (versión 16 o superior)
  • npm o yarn

Instalación

# Clona el repositorio
git clone https://github.com/Seb-RM/React_Side_Effects-Meme-Generator.git
cd React_Side_Effects-Meme-Generator

# Instala las dependencias
npm install

# Inicia el servidor de desarrollo
npm run dev

Configuración

No se requieren variables de entorno adicionales. La aplicación utiliza la API pública de Imgflip, que no necesita autenticación.

Construcción para Producción

# Construye la aplicación
npm run build

# Previsualiza la build
npm run preview

📚 Guía de Uso

  1. Accede a la aplicación: Abre http://localhost:XXXX en tu navegador después de ejecutar npm run dev.

  2. Edita el texto:

    • Ingresa texto en los campos "Top Text" y "Bottom Text".
    • El meme se actualiza automáticamente.
  3. Cambia la imagen:

    • Haz clic en "Get a new meme image 🖼" para seleccionar una imagen aleatoria de la API.
  4. Personaliza: Experimenta con diferentes combinaciones de texto e imágenes.

Ejemplo de Uso Básico

// El estado del meme se maneja en Main.jsx
const [meme, setMeme] = useState({
    topText: "One does not simply",
    bottomText: "Walk into Mordor",
    imageUrl: "http://i.imgflip.com/1bij.jpg",
});

⚙️ Explicación Técnica (DETALLADA)

📁 index.html

  • Propósito: Archivo HTML principal que sirve como punto de entrada para la aplicación React. Define la estructura básica del documento y carga el script de React.

  • Conceptos Clave: Estructura HTML5, meta tags para responsividad, carga de módulos ES6.

  • Fragmentos Destacados:

    <!doctype html>
    <html lang="en">
      <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>Meme Generator</title>
      </head>
      <body>
        <div id="root"></div>
        <script type="module" src="/src/main.jsx"></script>
      </body>
    </html>
  • Flujo de Datos: El div#root es el contenedor donde React monta la aplicación. El script carga main.jsx, que inicia el renderizado.

  • API/DOM: Utiliza el DOM estándar para el punto de montaje; no interactúa directamente con APIs externas.

📁 src/main.jsx

  • Propósito: Punto de entrada de la aplicación React. Configura el renderizado raíz y importa estilos globales.

  • Conceptos Clave: React 18's createRoot API, importación de módulos ES6, integración con CSS.

  • Fragmentos Destacados:

    import { createRoot } from 'react-dom/client'
    import './index.css'
    import App from './App.jsx'
    
    createRoot(document.getElementById('root')).render(
      <App />
    )
  • Flujo de Datos: Renderiza el componente App en el DOM. No maneja estado; delega a componentes hijos.

  • API/DOM: Utiliza document.getElementById para acceder al DOM y createRoot para el renderizado concurrente de React.

📁 src/App.jsx

  • Propósito: Componente raíz de la aplicación. Estructura la disposición general importando Header y Main.

  • Conceptos Clave: Composición de componentes en React, exportación por defecto.

  • Fragmentos Destacados:

    import Header from "./components/Header";
    import Main from "./components/Main";
    
    function App() {
      return (
        <>
          <Header />
          <Main />
        </>
      );
    }
    
    export default App;
  • Flujo de Datos: Renderiza Header y Main como hijos directos. No maneja estado propio.

  • API/DOM: No interactúa directamente; delega a componentes hijos.

📁 src/components/Header.jsx

  • Propósito: Componente de encabezado que muestra el logo y título de la aplicación.

  • Conceptos Clave: Importación de imágenes estáticas, JSX para renderizado.

  • Fragmentos Destacados:

    import trollFace from "../assets/images/troll-face.png";
    
    export default function Header() {
        return (
            <header className="header">
                <img src={trollFace} />
                <h1>Meme Generator</h1>
            </header>
        );
    }
  • Flujo de Datos: Estático; no recibe props ni maneja estado.

  • API/DOM: Renderiza elementos HTML con clases CSS para estilización.

📁 src/components/Main.jsx

  • Propósito: Componente principal que maneja la lógica de generación de memes, incluyendo fetch de API y manejo de estado.

  • Conceptos Clave: Hooks de React (useState, useEffect), manejo de eventos, fetch API, actualización de estado.

  • Fragmentos Destacados:

    useEffect(() => {
        fetch("https://api.imgflip.com/get_memes")
            .then((res) => res.json())
            .then((data) => setAllMemes(data.data.memes));
    }, []);
    
    function getMemeImage() {
        const randomNumber = Math.floor(Math.random() * allMemes.length);
        const newMemeUrl = allMemes[randomNumber].url;
        setMeme((prevMeme) => ({
            ...prevMeme,
            imageUrl: newMemeUrl,
        }));
    }
    
    function handleChange(event) {
        const { value, name } = event.currentTarget;
        setMeme((prevMeme) => ({
            ...prevMeme,
            [name]: value,
        }));
    }
  • Flujo de Datos:

    • useEffect ejecuta fetch al montar el componente, poblando allMemes.
    • handleChange actualiza el estado del meme en respuesta a inputs de usuario.
    • getMemeImage selecciona una imagen aleatoria y actualiza el estado.
    • El estado meme se pasa a elementos JSX para renderizado dinámico.
  • API/DOM:

    • Fetch API para obtener datos de Imgflip.
    • Eventos onChange en inputs y onClick en botón para actualizar estado.
    • Renderiza imagen y texto posicionados absolutamente sobre ella.

📁 src/index.css

  • Propósito: Estilos globales para la aplicación, definiendo layout, tipografía y efectos visuales.

  • Conceptos Clave: CSS Grid, Flexbox, posicionamiento absoluto, gradientes, sombras de texto.

  • Fragmentos Destacados:

    .form {
      display: grid;
      grid-template: auto auto / 1fr 1fr;
      gap: 17px;
      margin-bottom: 17px;
    }
    
    .meme span {
      position: absolute;
      text-align: center;
      font-family: impact, sans-serif;
      font-size: 2rem;
      text-transform: uppercase;
      color: white;
      text-shadow: 2px 2px 0 #000, ...;
    }
  • Flujo de Datos: Aplica estilos a elementos renderizados por componentes React.

  • API/DOM: Manipula el DOM a través de clases CSS; no interactúa con APIs.

🎯 Arquitectura

La aplicación sigue una arquitectura de componentes simple y modular:

  • App.jsx: Raíz que compone Header y Main.
  • Header.jsx: Componente estático para branding.
  • Main.jsx: Componente funcional con estado y efectos secundarios (side effects) usando useEffect para fetch inicial.

Flujo de Datos General:

  1. Montaje: useEffect en Main.jsx fetch memes → almacena en allMemes.
  2. Interacción: Usuario edita texto → handleChange actualiza estado.
  3. Generación: Click en botón → getMemeImage selecciona imagen aleatoria → actualiza imageUrl.
  4. Renderizado: Estado se refleja en DOM con estilos CSS.

Patrones Implementados: Componentes funcionales con hooks, separación de concerns (estado en Main, estilos en CSS), fetch en useEffect para efectos secundarios.


About

Meme Generator es una aplicación web de una sola página (SPA) desarrollada en React que permite a los usuarios crear memes personalizados de manera sencilla e interactiva.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published