JavaScript Básico y React

Fundamentos de programación y desarrollo de interfaces modernas

Objetivos de Aprendizaje

JavaScript Básico

Fundamentos
DOM
Almacenamiento

Variables y Tipos

// Declaración de variables
let nombre = "Juan"; // String
const edad = 30; // Number
let esMayor = true; // Boolean

// Arrays
const frutas = ["manzana", "banana", "naranja"];

// Objetos
const persona = {
  nombre: "María",
  edad: 25,
  profesion: "Desarrolladora"
};

Funciones y Control

// Función declarada
function saludar(nombre) {
  return `Hola, ${nombre}!`;
}

// Arrow function
const sumar = (a, b) => a + b;

// Condicionales
if (edad >= 18) {
  console.log("Mayor de edad");
} else {
  console.log("Menor de edad");
}

// Bucle for
for (let i = 0; i < frutas.length; i++) {
  console.log(frutas[i]);
}

Manipulación del DOM

// Seleccionar elementos
const titulo = document.getElementById('titulo');
const items = document.querySelectorAll('.item');

// Modificar contenido
titulo.textContent = 'Nuevo título';
titulo.style.color = 'blue';

// Crear elementos
const nuevoDiv = document.createElement('div');
nuevoDiv.className = 'nuevo';
document.body.appendChild(nuevoDiv);

Título Original

  • Item 1
  • Item 2

Manejo de Eventos

// Evento click
const boton = document.getElementById('miBoton');
boton.addEventListener('click', function() {
  console.log('Botón clickeado!');
});

// Evento formulario
const formulario = document.getElementById('miForm');
formulario.addEventListener('submit', (e) => {
  e.preventDefault();
  const datos = new FormData(formulario);
  console.log(Object.fromEntries(datos));
});

Clicks: 0

Web Storage API

// localStorage - Persistente
localStorage.setItem('usuario', 'JuanPerez');
const usuario = localStorage.getItem('usuario');

// sessionStorage - Temporal
sessionStorage.setItem('token', 'abc123');

// JSON
const datos = { nombre: 'María', edad: 25 };
localStorage.setItem('datos', JSON.stringify(datos));
const datosGuardados = JSON.parse(localStorage.getItem('datos'));

Depuración

// Console.log
console.log('Mensaje normal');
console.warn('Advertencia');
console.error('Error');

// Debugger
function funcionCompleja() {
  debugger; // Pausa la ejecución
  // Código a depurar
}

// Medición de performance
console.time('miFuncion');
miFuncion(); // Función a medir
console.timeEnd('miFuncion');

React

Fundamentos
Componentes
Herramientas

¿Qué es React?

React es una biblioteca de JavaScript para construir interfaces de usuario. Fue creada por Facebook y se destaca por:

  • Componentes reutilizables
  • DOM virtual para mejor rendimiento
  • Flujo de datos unidireccional
  • Sintaxis JSX (JavaScript + HTML)

Ejemplo Básico:

Entorno de Desarrollo

Configuración recomendada:

  • Node.js: Entorno de ejecución
  • npm/yarn: Gestión de paquetes
  • Create React App: Configuración automática
  • VS Code: Editor con extensiones para React
# Crear nueva aplicación
npx create-react-app mi-app

# Instalar dependencias adicionales
npm install react-router-dom axios

# Iniciar servidor de desarrollo
npm start

Alternativas Modernas:

Vite y Next.js ofrecen configuraciones más rápidas y optimizadas.

Componentes y Props

// Componente funcional
function Saludo(props) {
  return <h1>Hola, {props.nombre}!</h1>;
}

// Uso del componente
<Saludo nombre="Juan" />

// Componente con estado (Hooks)
function Contador() {
  const [count, setCount] = useState(0);

  return (
    <div>
      <p>Contador: {count}</p>
      <button onClick={() => setCount(count + 1)}>
        Incrementar
      </button>
    </div>
  );
}

Listas y Eventos

function ListaTareas() {
  const [tareas, setTareas] = useState([
    { id: 1, texto: 'Aprender React' },
    { id: 2, texto: 'Crear proyecto' }
  ]);

  const agregarTarea = () => {
    const nuevaTarea = {
      id: Date.now(),
      texto: 'Nueva tarea'
    };
    setTareas([...tareas, nuevaTarea]);
  };

  return (
    <div>
      <button onClick={agregarTarea}>Agregar</button>
      <ul>
        {tareas.map(tarea => (
          <li key={tarea.id}>{tarea.texto}</li>
        ))}
      </ul>
    </div>
  );
}

Herramientas Esenciales

  • Babel: Transpila JSX y ES6+ a JavaScript compatible
  • Webpack: Empaqueta módulos y recursos
  • ESLint: Analiza código en busca de errores
  • Prettier: Formatea código consistentemente
  • React DevTools: Extensión para depuración
// Ejemplo de configuración .eslintrc
{
  "extends": [
    "eslint:recommended",
    "plugin:react/recommended"
  ],
  "rules": {
    "react/prop-types": "off",
    "no-unused-vars": "warn"
  }
}

Ecosistema React

  • React Router: Navegación entre vistas
  • Redux: Gestión de estado global
  • Axios: Peticiones HTTP
  • Styled Components: CSS en JS
  • Next.js: Framework para React

Flujo de Trabajo Moderno:

Para nuevos proyectos, considera Vite + React + TypeScript + Tailwind CSS como stack moderno.

Comparación

JavaScript Vanilla

  • Ventajas: No requiere compilación, total control, sin dependencias
  • Desventajas: Código más verboso, difícil de escalar, manejo manual del DOM
  • Mejor para: Pequeñas interacciones, páginas simples, aprendizaje

React

  • Ventajas: Componentes reutilizables, estado manejable, rico ecosistema
  • Desventajas: Curva de aprendizaje, configuración inicial, overhead para proyectos pequeños
  • Mejor para: Aplicaciones complejas, equipos, proyectos escalables

Recomendaciones

  • Aprende bien JavaScript antes de React
  • Usa JavaScript vanilla para pequeños scripts
  • Elige React para aplicaciones complejas
  • Considera el tamaño y necesidades del proyecto
  • No tengas miedo de usar ambas en el mismo proyecto

Resumen Semana 5

Conceptos Clave

  • Fundamentos de JavaScript (sintaxis, estructuras)
  • Manipulación del DOM y manejo de eventos
  • Almacenamiento local con Web Storage API
  • Componentes, estado y props en React
  • Herramientas del ecosistema React

Herramientas Dominadas

  • Variables, funciones y estructuras de control
  • document.querySelector y eventos
  • localStorage y JSON
  • Create React App y componentes
  • Babel, Webpack y ESLint

Próximos Pasos

  • Profundizar en hooks de React (useEffect, useContext)
  • Aprender React Router para navegación
  • Explorar gestión de estado con Redux o Context API
  • Practicar integración con APIs reales
  • Crear un proyecto completo con React

Ejercicios de Laboratorio

Ejercicio 1: Lista de Tareas con JavaScript

Implementé una lista de tareas interactiva usando JavaScript puro:

  • Agregar nuevas tareas
  • Marcar tareas como completadas
  • Eliminar tareas
  • Persistencia con localStorage

Resultado:

Lista de Tareas (JavaScript)

    Ejercicio 2: Lista de Tareas con React

    Reimplementé la lista de tareas usando React:

    • Componente TodoList con estado
    • Manejo de eventos para agregar/completar/eliminar
    • Mismo funcionamiento pero con enfoque React
    • Uso de hooks (useState)

    Resultado:

    Ejercicio 3: Configuración de Entorno

    Configuré un proyecto React desde cero con:

    • Create React App inicializado
    • ESLint y Prettier para calidad de código
    • React Router para navegación básica
    • Sass para estilos
    • Axios para peticiones HTTP

    Estructura del Proyecto:

    mi-app-react/
    ├── node_modules/
    ├── public/
    │   ├── index.html
    │   └── favicon.ico
    ├── src/
    │   ├── components/
    │   │   ├── Header.jsx
    │   │   └── Footer.jsx
    │   ├── pages/
    │   │   ├── Home.jsx
    │   │   └── About.jsx
    │   ├── styles/
    │   │   ├── main.scss
    │   │   └── _variables.scss
    │   ├── App.jsx
    │   ├── index.js
    │   └── setupTests.js
    ├── .eslintrc.json
    ├── .prettierrc
    ├── package.json
    └── README.md

    Reflexión sobre el Aprendizaje

    ¿Qué aprendí?

    Esta semana fue fundamental para mi crecimiento como desarrollador:

    • JavaScript esencial: Consolidé mi comprensión de variables, funciones, arrays y objetos
    • DOM manipulation: Aprendí a seleccionar y modificar elementos de la página dinámicamente
    • React fundamentals: Comprendí el modelo de componentes y el flujo unidireccional de datos
    • Herramientas modernas: Me familiaricé con Babel, Webpack y el ecosistema npm
    • Diferentes enfoques: Experimenté las diferencias entre JavaScript puro y React

    ¿Cómo aprendí?

    Mi proceso de aprendizaje fue práctico y estructurado:

    • Ejercicios progresivos: Comencé con JavaScript básico y avanzé hasta React
    • Comparación directa: Implementé el mismo proyecto con ambas tecnologías
    • Configuración manual: Experimenté con Webpack y Babel para entender el proceso
    • Documentación: Estudié a profundidad la documentación oficial de React
    • Depuración: Usé Chrome DevTools y React DevTools para entender el flujo

    El momento más revelador fue cuando implementé la misma funcionalidad (lista de tareas) con ambos enfoques y pude comparar directamente las ventajas de cada uno.

    Próximos Pasos

    Para continuar mi aprendizaje:

    • Profundizar en hooks avanzados (useEffect, useReducer, useContext)
    • Aprender React Router para aplicaciones multipágina
    • Explorar gestión de estado con Redux o Context API
    • Practicar integración con APIs reales usando Axios
    • Crear un proyecto completo con autenticación y base de datos

    También planeo explorar frameworks basados en React como Next.js para renderizado del lado del servidor.