馃挕 React y ES6

React y ES6

馃挕 React y ES6

Aprende las caracter铆sticas de ES6 que son esenciales para trabajar con React.



馃摑 ¿Qu茅 es ES6?

ES6 significa ECMAScript 6, tambi茅n conocido como ECMAScript 2015. ECMAScript es el est谩ndar que define c贸mo funciona JavaScript, y ES6 es la sexta versi贸n oficial de este est谩ndar, publicada en 2015.

ES6 introdujo muchas mejoras y nuevas caracter铆sticas que hacen el desarrollo en JavaScript m谩s moderno y eficiente, especialmente para trabajar con React.


Ejemplo de ES6 b谩sico

Antes de ES6, declar谩bamos variables usando var:

var nombre = "Juan";
console.log(nombre); // Juan
  

Con ES6, podemos usar let y const para declarar variables con un alcance m谩s controlado:

let edad = 25;     // Variable que puede cambiar
const PI = 3.1416; // Constante que no puede cambiar

console.log(edad); // 25
console.log(PI);   // 3.1416
  

Caracter铆sticas principales de ES6

  • 馃搶 Clases: sintaxis m谩s clara para crear objetos y componentes.
  • 馃搶 Funciones de flecha: forma corta de escribir funciones.
  • 馃搶 M茅todos de array: como .map(), .filter(), .reduce().
  • 馃搶 Desestructuraci贸n: acceder a valores de arrays u objetos de forma m谩s limpia.
  • 馃搶 M贸dulos: importar y exportar funciones, clases o variables entre archivos.
  • 馃搶 Operador ternario: forma compacta de escribir condicionales.
  • 馃搶 Operador spread (...): copiar o combinar arrays y objetos f谩cilmente.

Estas caracter铆sticas hacen que el c贸digo en React sea m谩s limpio, moderno y f谩cil de mantener. En las siguientes secciones, veremos cada caracter铆stica con ejemplos pr谩cticos aplicables a React.




⚡ Por qu茅 aprender ES6 para React

React est谩 construido sobre JavaScript moderno, y ES6 (ECMAScript 2015) introdujo muchas caracter铆sticas que hacen que el desarrollo con React sea m谩s eficiente, limpio y comprensible. Aprender ES6 es esencial para aprovechar al m谩ximo las capacidades de React.


1️⃣ Clases y componentes de clase

ES6 introdujo las clases, que son la base de los componentes de clase en React. Sin comprender clases, no podr铆as manejar estados y m茅todos en componentes de clase de manera efectiva.

class MiComponente extends React.Component {
  constructor(props) {
    super(props);
    this.state = { contador: 0 };
  }

  incrementar = () => this.setState({ contador: this.state.contador + 1 });

  render() {
    return <h1>Contador: {this.state.contador}</h1>;
  }
}
  

2️⃣ Funciones de flecha y manejo de eventos

Las funciones de flecha conservan el contexto de this y permiten escribir event handlers m谩s limpios.

const Boton = () => {
  const [clicks, setClicks] = React.useState(0);

  const handleClick = () => setClicks(clicks + 1);

  return <button onClick={handleClick}>Clicks: {clicks}</button>;
};
  

3️⃣ Desestructuraci贸n y props

En React, es com煤n recibir props en los componentes. La desestructuraci贸n de ES6 permite acceder f谩cilmente a las propiedades de un objeto.

function Saludo({ nombre, edad }) {
  return <p>Hola {nombre}, tienes {edad} a帽os.</p>;
}

// Uso
<Saludo nombre="Ana" edad={25} />
  

4️⃣ M贸dulos y import/export

ES6 introdujo los m贸dulos nativos (import y export), que son la base de la organizaci贸n de componentes y archivos en React.

import React from 'react';
import Contador from './Contador.jsx';

function App() {
  return <Contador />;
}

export default App;
  

5️⃣ Ventajas de aprender ES6 para React

  • Escritura de c贸digo m谩s limpia y legible.
  • Uso eficiente de state, props y eventos.
  • Compatibilidad con todas las herramientas modernas de React.
  • Facilita la comprensi贸n de librer铆as y frameworks modernos.

✅ En resumen, ES6 no es solo una mejora de JavaScript, sino un requisito pr谩ctico para desarrollar aplicaciones React modernas de forma eficiente y profesional.




馃敼 Clases en ES6

ES6 introdujo las clases, que son una forma m谩s clara y moderna de crear objetos y manejar la herencia en JavaScript. Una clase es un tipo de funci贸n, pero se define con la palabra clave class, y las propiedades se asignan dentro del m茅todo constructor().


Ejemplo b谩sico: crear una clase

class Car {
  constructor(name) {
    this.brand = name;
  }
}

// Crear un objeto basado en la clase
const myCar = new Car("Ford");

console.log(myCar.brand); // Ford
  

馃敼 Nota: El constructor() se llama autom谩ticamente cuando se inicializa el objeto. 馃敼 Convenci贸n: los nombres de clases empiezan con may煤scula (ej. Car).


M茅todos en clases

Puedes agregar m茅todos propios a la clase para definir comportamientos.

class Car {
  constructor(name) {
    this.brand = name;
  }
  
  present() {
    return 'I have a ' + this.brand;
  }
}

const myCar = new Car("Ford");
console.log(myCar.present()); // I have a Ford
  

馃敼 Nota: Para llamar al m茅todo usamos objeto.nombreMetodo().


Herencia de clases

Para crear herencia, usamos la palabra clave extends. Una clase hija hereda todos los m茅todos de la clase padre.

class Car {
  constructor(name) {
    this.brand = name;
  }

  present() {
    return 'I have a ' + this.brand;
  }
}

// Clase hija que hereda de Car
class Model extends Car {
  constructor(name, mod) {
    super(name); // Llama al constructor del padre
    this.model = mod;
  }
  
  show() {
    return this.present() + ', it is a ' + this.model;
  }
}

const myCar = new Model("Ford", "Mustang");
console.log(myCar.show()); // I have a Ford, it is a Mustang
  

馃敼 super() se refiere a la clase padre y permite acceder a sus propiedades y m茅todos. 馃敼 Con herencia, podemos reutilizar l贸gica y mantener el c贸digo m谩s limpio.


✅ Las clases son esenciales en React porque los componentes de clase se basan en este concepto. M谩s adelante veremos c贸mo combinarlas con JSX y el estado de los componentes.




馃徆 Funciones de flecha (Arrow Functions)

Las funciones de flecha fueron introducidas en ES6 para simplificar la forma en que escribimos funciones en JavaScript. Nos permiten una sintaxis m谩s corta y un manejo m谩s intuitivo del this, lo que las hace muy 煤tiles dentro de React.


馃З Antes de ES6

Antes de ES6, las funciones se declaraban usando la palabra clave function:

hello = function() {
  return "Hello World!";
}
  

Resultado:

Hello World!

⚡ Con ES6 (Funciones de Flecha)

Con ES6, puedes escribir la misma funci贸n de una manera m谩s corta y elegante:

hello = () => {
  return "Hello World!";
}
  

Si la funci贸n contiene una sola l铆nea que devuelve un valor, puedes incluso omitir las llaves {} y la palabra return:

hello = () => "Hello World!";
  

Resultado:

Hello World!

馃摜 Funciones de flecha con par谩metros

Si tu funci贸n necesita recibir valores, los pasas dentro de los par茅ntesis. Por ejemplo:

hello = (name) => "Hello " + name;
  

Resultado:

Hello John

Si solo hay un par谩metro, puedes incluso omitir los par茅ntesis:

hello = name => "Hello " + name;
  

馃挕 Ejemplo pr谩ctico en React

En React, las funciones de flecha se usan constantemente, especialmente para manejar eventos y mantener el contexto del componente.

import { useState } from "react";

function App() {
  const [count, setCount] = useState(0);

  // Funci贸n de flecha para manejar el click
  const handleClick = () => setCount(count + 1);

  return (
    <div>
      <h2>Contador: {count}</h2>
      <button onClick={handleClick}>Incrementar</button>
    </div>
  );
}

export default App;
  

馃憠 En este ejemplo, la funci贸n handleClick es una funci贸n de flecha que mantiene el contexto del componente y actualiza el estado con cada clic.


馃攳 Diferencia entre funci贸n regular y funci贸n de flecha con this

Una diferencia clave es c贸mo manejan el contexto de this. Las funciones regulares cambian su contexto seg煤n qui茅n las llame, mientras que las funciones de flecha mantienen el contexto del lugar donde fueron definidas.

馃摌 Ejemplo con funci贸n regular
class Header {
  constructor() {
    this.color = "Red";
  }

  // Funci贸n regular
  changeColor = function() {
    document.getElementById("demo").innerHTML += this;
  }
}

const myheader = new Header();
window.addEventListener("load", myheader.changeColor);
document.getElementById("btn").addEventListener("click", myheader.changeColor);
  

En este caso, el valor de this cambia dependiendo de qui茅n llama a la funci贸n (el objeto window o el button).

馃摋 Ejemplo con funci贸n de flecha
class Header {
  constructor() {
    this.color = "Red";
  }

  // Funci贸n de flecha
  changeColor = () => {
    document.getElementById("demo").innerHTML += this;
  }
}

const myheader = new Header();
window.addEventListener("load", myheader.changeColor);
document.getElementById("btn").addEventListener("click", myheader.changeColor);
  

Aqu铆, this siempre hace referencia al objeto Header, sin importar qui茅n haya llamado a la funci贸n.


✅ Conclusi贸n

  • Las funciones de flecha hacen el c贸digo m谩s limpio y f谩cil de leer.
  • No crean su propio this, lo cual es ideal en React.
  • Son muy utilizadas en hooks y eventos de componentes funcionales.



馃敜 Variables en ES6: let, const y var

En JavaScript (y por tanto en React), las variables se utilizan para almacenar valores. Antes de ES6, todas las variables se declaraban con var, pero desde ES6 tenemos nuevas formas m谩s seguras y modernas de hacerlo: let y const.


馃摌 var – La forma antigua

La palabra clave var se usaba tradicionalmente para declarar variables. Sin embargo, tiene comportamientos que pueden causar errores dif铆ciles de detectar: hoisting y alcance global.

var nombre = "Juan";
console.log(nombre); // Juan

if (true) {
  var nombre = "Pedro";
  console.log(nombre); // Pedro
}

console.log(nombre); // Pedro 馃槺
  

Como puedes ver, var no respeta el bloque if; la variable es global y se sobrescribe. Esto puede causar errores al trabajar en proyectos grandes.


馃煢 let – Variables con alcance de bloque

let fue introducido en ES6 para solucionar los problemas de var. Las variables declaradas con let solo existen dentro del bloque donde fueron definidas.

let nombre = "Juan";
console.log(nombre); // Juan

if (true) {
  let nombre = "Pedro";
  console.log(nombre); // Pedro
}

console.log(nombre); // Juan ✅
  

Aqu铆, la variable nombre dentro del if es diferente a la variable fuera de 茅l. Cada bloque crea su propio “espacio” de variables.


馃煩 const – Constantes (valores que no cambian)

const se usa para declarar variables cuyo valor no deber铆a cambiar. Es ideal para valores fijos o referencias a objetos y funciones.

const PI = 3.1416;
console.log(PI); // 3.1416

// PI = 3.14; ❌ Error: no se puede reasignar una constante
  

Pero atenci贸n: aunque no puedes reasignar una variable const, si su valor es un objeto o array, puedes modificar su contenido.

// Objeto con const
const persona = { nombre: "Ana", edad: 25 };
persona.edad = 30; // ✅ permitido
console.log(persona); // { nombre: "Ana", edad: 30 }
  

⚛️ Uso de let y const en React

En React, const se usa con mucha frecuencia para definir componentes, funciones y estados que no cambian directamente. let se usa solo cuando un valor va a cambiar dentro de una funci贸n.

import { useState } from "react";

function App() {
  const [count, setCount] = useState(0); // count no cambia directamente

  let mensaje = "Haz clic para incrementar"; // cambia seg煤n condiciones

  if (count > 5) {
    mensaje = "¡Buen trabajo!";
  }

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

export default App;
  

馃憠 Aqu铆, const se usa para el estado (que React gestiona internamente), y let para variables locales dentro del componente.


馃 En resumen:

Tipo Alcance Puede reasignarse Uso recomendado
var Global o funci贸n ✅ S铆 ❌ Evitarlo (solo para compatibilidad)
let Bloque ✅ S铆 Para valores que cambian
const Bloque ❌ No Para valores y funciones constantes



馃З M茅todos de Array en ES6: .map(), .filter() y .reduce()

En JavaScript moderno (y especialmente en React), los m茅todos de arreglo como .map(), .filter() y .reduce() son esenciales. Permiten transformar, filtrar y resumir datos de forma sencilla y elegante.


馃敼 .map() – Transformar elementos

El m茅todo .map() recorre todos los elementos de un arreglo y devuelve un nuevo arreglo con los resultados de aplicar una funci贸n a cada elemento.

// Ejemplo: multiplicar todos los n煤meros por 2
const numeros = [1, 2, 3, 4];
const duplicados = numeros.map(num => num * 2);

console.log(duplicados); // [2, 4, 6, 8]
  

En React, .map() se usa frecuentemente para renderizar listas din谩micas:

function ListaUsuarios() {
  const usuarios = ["Ana", "Luis", "Carla", "Pablo"];

  return (
    <ul>
      {usuarios.map((usuario, index) => (
        <li key={index}>{usuario}</li>
      ))}
    </ul>
  );
}

export default ListaUsuarios;
  

馃憠 Cada elemento del array genera un <li>. En React es importante incluir una key 煤nica al mapear listas.


馃敼 .filter() – Filtrar elementos

El m茅todo .filter() devuelve un nuevo arreglo solo con los elementos que cumplan una condici贸n espec铆fica.

// Ejemplo: filtrar n煤meros mayores que 5
const numeros = [3, 7, 2, 8, 5];
const mayores = numeros.filter(num => num > 5);

console.log(mayores); // [7, 8]
  

En React, se usa para mostrar solo ciertos elementos, por ejemplo usuarios activos:

function UsuariosActivos() {
  const usuarios = [
    { nombre: "Ana", activo: true },
    { nombre: "Luis", activo: false },
    { nombre: "Mar铆a", activo: true },
  ];

  const activos = usuarios.filter(u => u.activo);

  return (
    <ul>
      {activos.map((u, i) => (
        <li key={i}>{u.nombre}</li>
      ))}
    </ul>
  );
}

export default UsuariosActivos;
  

馃憠 .filter() no modifica el array original, devuelve uno nuevo con los elementos que pasen el filtro.


馃敼 .reduce() – Reducir a un solo valor

El m茅todo .reduce() toma todos los elementos de un arreglo y los “reduce” a un solo resultado, acumulando valores paso a paso.

// Ejemplo: sumar todos los valores
const numeros = [10, 20, 30, 40];
const total = numeros.reduce((acumulador, actual) => acumulador + actual, 0);

console.log(total); // 100
  

Tambi茅n se puede usar con objetos o arreglos m谩s complejos:

// Ejemplo: sumar el precio total de productos
const productos = [
  { nombre: "Teclado", precio: 25 },
  { nombre: "Rat贸n", precio: 15 },
  { nombre: "Monitor", precio: 100 }
];

const total = productos.reduce((acc, item) => acc + item.precio, 0);

console.log("Total:", total); // Total: 140
  

⚛️ Ejemplo combinado en React

Aqu铆 un ejemplo m谩s real: una lista de productos que usamos filter() para mostrar solo los disponibles y reduce() para calcular el total.

function Tienda() {
  const productos = [
    { id: 1, nombre: "Laptop", precio: 1200, disponible: true },
    { id: 2, nombre: "Tablet", precio: 500, disponible: false },
    { id: 3, nombre: "Monitor", precio: 300, disponible: true },
  ];

  const disponibles = productos.filter(p => p.disponible);
  const total = disponibles.reduce((acc, p) => acc + p.precio, 0);

  return (
    <div>
      <h2>Productos Disponibles</h2>
      <ul>
        {disponibles.map(p => (
          <li key={p.id}>{p.nombre} - ${p.precio}</li>
        ))}
      </ul>
      <h3>Total: ${total}</h3>
    </div>
  );
}

export default Tienda;
  

馃 En resumen:

M茅todo Descripci贸n Devuelve Uso t铆pico en React
.map() Transforma cada elemento del array. Nuevo array del mismo tama帽o. Renderizar listas din谩micas.
.filter() Filtra elementos seg煤n una condici贸n. Nuevo array con menos elementos. Mostrar solo ciertos datos (usuarios activos, tareas pendientes...).
.reduce() Combina todos los valores en un 煤nico resultado. Un valor (n煤mero, objeto, etc.). Sumar totales o calcular estad铆sticas.



馃П Desestructuraci贸n en React

La desestructuraci贸n es una caracter铆stica de JavaScript (ES6) que permite extraer valores de objetos o arrays y asignarlos directamente a variables individuales. En React, se utiliza frecuentemente con props, hooks y datos de estado para escribir un c贸digo m谩s limpio y legible.

Nota: la desestructuraci贸n reduce el acceso repetitivo a objetos o matrices, haciendo tu c贸digo m谩s simple y elegante.


馃敼 Desestructuraci贸n de Arrays

Antes de ES6, para obtener valores de un array era necesario acceder a cada elemento por su posici贸n:

// Antes:
const vehicles = ['mustang', 'f-150', 'expedition'];

// Forma antigua
const car = vehicles[0];
const truck = vehicles[1];
const suv = vehicles[2];

console.log(truck); // f-150
  

Con la desestructuraci贸n, podemos hacerlo en una sola l铆nea:

// Con desestructuraci贸n:
const vehicles = ['mustang', 'f-150', 'expedition'];

const [car, truck, suv] = vehicles;

console.log(truck); // f-150
  

El orden es importante: las variables se asignan seg煤n la posici贸n en el array. Si solo quieres algunos elementos, puedes omitir los dem谩s dejando comas vac铆as:

const vehicles = ['mustang', 'f-150', 'expedition'];

// Solo obtener el coche y el SUV:
const [car,, suv] = vehicles;

console.log(suv); // expedition
  

La desestructuraci贸n tambi茅n es 煤til cuando una funci贸n devuelve un array:

function dateInfo(date) {
  const d = date.getDate();
  const m = date.getMonth() + 1;
  const y = date.getFullYear();
  return [d, m, y];
}

const [day, month, year] = dateInfo(new Date());

console.log(day, month, year); // 12 11 2025
  

馃敼 Desestructuraci贸n de Objetos

La desestructuraci贸n tambi茅n se puede usar para extraer valores de objetos:

const person = {
  firstName: "John",
  lastName: "Doe",
  age: 50
};

// Desestructurando
let { firstName, lastName, age } = person;

console.log(firstName); // John
  

El orden no importa cuando trabajamos con objetos, ya que se accede por nombre de propiedad.

const person = {
  firstName: "John",
  lastName: "Doe",
  age: 50
};

// Desestructurando en orden diferente
let { lastName, age, firstName } = person;

console.log(lastName); // Doe
  

Tambi茅n puedes desestructurar solo las propiedades que te interesen:

const person = {
  firstName: "John",
  lastName: "Doe",
  age: 50
};

// Solo extraer el nombre
let { firstName } = person;

console.log(firstName); // John
  

Si una propiedad puede faltar, puedes establecer valores predeterminados:

const person = {
  firstName: "John",
  lastName: "Doe",
  age: 50
};

// Valor por defecto para "country"
let { firstName, lastName, age, country = "Norway" } = person;

console.log(country); // Norway
  

Tambi茅n puedes desestructurar objetos anidados:

const person = {
  firstName: "John",
  lastName: "Doe",
  age: 50,
  car: {
    brand: "Ford",
    model: "Mustang"
  }
};

// Desestructuraci贸n profunda
let { firstName, car: { brand, model } } = person;

console.log(`Mi nombre es ${firstName}, y conduzco un ${brand} ${model}.`);
// Mi nombre es John, y conduzco un Ford Mustang.
  

⚛️ Desestructuraci贸n en Componentes de React

En React, la desestructuraci贸n se usa com煤nmente para trabajar con props, hooks y respuestas de API. Hace que el c贸digo sea m谩s corto y claro.

Props Desestructuraci贸n

Mira la diferencia entre usar y no usar desestructuraci贸n:

// Sin desestructuraci贸n:
function Greeting(props) {
  return <h1>Hola, {props.name}! Tienes {props.age} a帽os.</h1>;
}

// Con desestructuraci贸n:
function Greeting({ name, age }) {
  return <h1>Hola, {name}! Tienes {age} a帽os.</h1>;
}
  

馃憠 Usar desestructuraci贸n evita repetir props. varias veces.

Ejemplo en acci贸n:

import { createRoot } from 'react-dom/client';

function Greeting({ name, age }) {
  return <h1>Hola, {name}! Tienes {age} a帽os.</h1>;
}

createRoot(document.getElementById('root')).render(
  <Greeting name="John" age={25} />
);
  

useState Hook y Desestructuraci贸n

El hook useState() devuelve un array con dos elementos: el valor actual y la funci贸n para actualizarlo. Usamos desestructuraci贸n para nombrarlos f谩cilmente:

import { createRoot } from 'react-dom/client';
import { useState } from 'react';

function Counter() {
  // Desestructurando el array que devuelve useState
  const [count, setCount] = useState(0);
  
  return (
    <button onClick={() => setCount(count + 1)}>
      Count: {count}
    </button>
  );
}

createRoot(document.getElementById('root')).render(
  <Counter />
);
  

馃憠 Sin desestructuraci贸n, tendr铆as que usar algo como state[0] y state[1], lo cual ser铆a mucho menos claro.


馃 En resumen:

  • Objetos: const { prop } = objeto;
  • Arrays: const [a, b] = arreglo;
  • React: Muy 煤til para props y hooks (useState, useReducer, etc.)



✨ Operador de Spread (ES6)

El operador de spread (...) fue introducido en ES6 y permite expandir los elementos de un arreglo u objeto donde se esperan m煤ltiples valores. Es muy 煤til en React para copiar arrays, combinar objetos y pasar props a componentes.


1️⃣ Copiar Arrays

Antes de ES6, copiar un array requer铆a m茅todos como slice(). Con el operador spread es mucho m谩s simple:

// Copiar un array con spread
const numbers = [1, 2, 3];
const newNumbers = [...numbers];

console.log(newNumbers); // [1, 2, 3]
  

⚡ Si modificas el nuevo array, el original no se ve afectado, ya que se crea una copia superficial.


2️⃣ Combinar Arrays

Puedes combinar m煤ltiples arrays f谩cilmente:

const fruits = ['馃崕', '馃崒'];
const vegetables = ['馃', '馃ウ'];
const food = [...fruits, ...vegetables];

console.log(food); // ['馃崕', '馃崒', '馃', '馃ウ']
  

3️⃣ Agregar elementos al copiar

Puedes agregar nuevos valores mientras haces la copia:

const numbers = [1, 2, 3];
const extended = [0, ...numbers, 4];

console.log(extended); // [0, 1, 2, 3, 4]
  

4️⃣ Copiar Objetos

El operador spread tambi茅n funciona con objetos. Es muy 煤til para mantener el estado inmutable en React:

const user = { name: 'Alice', age: 25 };
const updatedUser = { ...user, city: 'Madrid' };

console.log(updatedUser);
// { name: 'Alice', age: 25, city: 'Madrid' }
  

馃敼 Aqu铆 estamos creando un nuevo objeto updatedUser copiando todas las propiedades de user y agregando una nueva propiedad.


5️⃣ Combinar Objetos

Tambi茅n puedes fusionar varios objetos f谩cilmente:

const defaults = { theme: 'light', language: 'es' };
const userSettings = { theme: 'dark' };

const settings = { ...defaults, ...userSettings };

console.log(settings); // { theme: 'dark', language: 'es' }
  

馃摌 En este ejemplo, la propiedad theme de userSettings sobrescribe la de defaults.


6️⃣ Operador Spread en React

Una aplicaci贸n muy com煤n del operador spread en React es pasar todas las props de un objeto a un componente:

// UserCard.jsx
export default function UserCard({ name, age, country }) {
  return (
    <div>
      <h3>{name}</h3>
      <p>Edad: {age}</p>
      <p>Pa铆s: {country}</p>
    </div>
  );
}

// App.jsx
import UserCard from './UserCard';

const user = { name: 'John', age: 30, country: 'Spain' };

function App() {
  return <UserCard {...user} />;
}
  

✅ El operador ... pasa autom谩ticamente cada propiedad del objeto user como una prop al componente UserCard.


7️⃣ Resumen

  • Copiar arrays u objetos: const copy = [...array] o {...object}
  • Combinar valores: [...arr1, ...arr2]
  • Agregar valores: [newVal, ...arr]
  • Fusionar objetos: {...obj1, ...obj2}
  • React props: <Component {...props} />

馃殌 El operador de spread es una de las herramientas m谩s poderosas y utilizadas en React moderno.




馃摝 M贸dulos en ES6

Los m贸dulos de ES6 permiten dividir el c贸digo en archivos separados y reutilizables. Cada m贸dulo puede export (exportar) y import (importar) funciones, variables o clases desde/hacia otros archivos. Esto es fundamental para organizar proyectos React.


馃З ¿Por qu茅 usar m贸dulos?

Antes de ES6 el c贸digo a menudo viv铆a en un solo archivo o necesitaba herramientas externas. Con m贸dulos nativos puedes mantener cada componente o utilidad en su propio archivo y importar solo lo que necesitas.


1. Exportar (named exports)

Archivo: message.js

// message.js
export function greet(name) {
  return `Hello, ${name}!`;
}

export const greeting = "Welcome to ES6 Modules!";
  

Archivo que importa:

// main.js
import { greet, greeting } from './message.js';

console.log(greeting);
console.log(greet('John'));
  

2. Exportaci贸n por defecto (default export)

Cuando quieres exportar una cosa principal desde un archivo:

// math.js
export default function add(a, b) {
  return a + b;
}
  

Y lo importas sin llaves:

// main.js
import add from './math.js';
console.log(add(5, 3)); // 8
  

3. Exportaci贸n combinada (default + named)

// helpers.js
export default function logMessage(msg) {
  console.log('LOG:', msg);
}

export const version = '1.0.0';
export function multiply(a, b) { return a * b; }
  

Importando:

// main.js
import logMessage, { version, multiply } from './helpers.js';

logMessage('App initialized');
console.log(version);
console.log(multiply(4, 5)); // 20
  

4. Importar todo el m贸dulo como namespace

// main.js
import * as Utils from './helpers.js';

Utils.logMessage('Using module namespace');
console.log(Utils.multiply(3, 3));
  

5. M贸dulos en React (componentes como m贸dulos)

En React cada componente suele ser un m贸dulo. Ejemplo sencillo:

// Greeting.jsx
export default function Greeting({ name }) {
  return <h1>Hello, {name}!</h1>;
}
  
// App.jsx
import Greeting from './Greeting.jsx';

function App() {
  return (
    <div>
      <Greeting name="John" />
    </div>
  );
}

export default App;
  

6. Resumen r谩pido

  • export const foo = ... — exportaci贸n con nombre.
  • export default ... — exportaci贸n por defecto (una sola por archivo).
  • import { foo } — importar con nombre.
  • import Foo — importar default.
  • import * as Name — importar todo como un namespace.

✅ Consejo: en React, usa export default para componentes principales y named exports para utilidades o varias funciones desde el mismo archivo.




馃敼 Operador Ternario (Condicional)

El operador ternario en JavaScript es una forma abreviada de escribir una condici贸n if...else. Su sintaxis es m谩s concisa y se usa ampliamente en React para renderizar contenido condicional.

condici贸n ? expresi贸n_si_verdadera : expresi贸n_si_falsa
  

El operador ternario eval煤a la condici贸n; si es verdadera, ejecuta la primera expresi贸n, y si es falsa, ejecuta la segunda.


1️⃣ Ejemplo b谩sico

const edad = 18;
const mensaje = edad >= 18 ? 'Eres mayor de edad' : 'Eres menor de edad';

console.log(mensaje); // "Eres mayor de edad"
  

馃摌 Aqu铆, si edad es mayor o igual a 18, se asigna el primer texto; de lo contrario, el segundo.


2️⃣ Comparaci贸n con if...else

El mismo ejemplo con una estructura tradicional ser铆a:

let mensaje;
if (edad >= 18) {
  mensaje = 'Eres mayor de edad';
} else {
  mensaje = 'Eres menor de edad';
}
  

✅ Como ves, el operador ternario ahorra l铆neas de c贸digo sin perder claridad.


3️⃣ Ternario anidado

Tambi茅n puedes anidar operadores ternarios, aunque se recomienda hacerlo con cuidado para no perder legibilidad:

const nota = 8;
const resultado =
  nota >= 9 ? 'Excelente' :
  nota >= 7 ? 'Notable' :
  nota >= 5 ? 'Aprobado' : 'Suspendido';

console.log(resultado); // "Notable"
  

⚠️ Aunque es v谩lido, cuando hay muchas condiciones es preferible usar if...else o switch.


4️⃣ Uso del operador ternario en React

El operador ternario es muy usado en React para renderizado condicional. Permite mostrar componentes o elementos dependiendo de una condici贸n.

// Ejemplo de renderizado condicional en React
function Greeting({ isLoggedIn }) {
  return (
    <div>
      {isLoggedIn ? (
        <h2>Bienvenido de nuevo!</h2>
      ) : (
        <h2>Por favor, inicia sesi贸n.</h2>
      )}
    </div>
  );
}
  

✅ Si isLoggedIn es true, muestra “Bienvenido de nuevo”. Si es false, muestra “Por favor, inicia sesi贸n”.


5️⃣ Ternario dentro de JSX

Tambi茅n puedes usarlo dentro de elementos JSX para mostrar estilos, textos o componentes diferentes:

function Status({ online }) {
  return (
    <p style={{ color: online ? 'green' : 'red' }}>
      {online ? '馃煝 En l铆nea' : '馃敶 Desconectado'}
    </p>
  );
}
  

馃帹 En este caso, tanto el texto como el color cambian seg煤n el valor de online.


6️⃣ Resumen

  • ✔️ Sintaxis: condici贸n ? valorSiVerdadero : valorSiFalso
  • ✔️ Ideal para expresiones cortas y renderizado condicional en React
  • ⚠️ Evita anidar demasiados ternarios — puede afectar la legibilidad

馃殌 El operador ternario es una herramienta poderosa y compacta para manejar condiciones simples en una sola l铆nea.




馃敼 Cadenas de Plantillas (Template Strings)

Las cadenas de plantillas o template strings fueron introducidas en ES6 y permiten crear cadenas de texto m谩s din谩micas y legibles. A diferencia de las comillas simples (' ') o dobles (" "), las cadenas de plantilla usan backticks (` `).


1️⃣ Concatenaci贸n tradicional (antes de ES6)

Antes de ES6, para combinar variables dentro de un texto hab铆a que usar el operador +:

const nombre = "Juan";
const edad = 28;
const mensaje = "Hola, mi nombre es " + nombre + " y tengo " + edad + " a帽os.";

console.log(mensaje);
// "Hola, mi nombre es Juan y tengo 28 a帽os."
  

馃槱 Esto puede volverse dif铆cil de leer cuando se concatenan muchas variables o saltos de l铆nea.


2️⃣ Uso de Template Strings (ES6)

Con las cadenas de plantillas, puedes incrustar variables y expresiones f谩cilmente usando la sintaxis ${expresi贸n}:

const nombre = "Juan";
const edad = 28;
const mensaje = `Hola, mi nombre es ${nombre} y tengo ${edad} a帽os.`;

console.log(mensaje);
// "Hola, mi nombre es Juan y tengo 28 a帽os."
  

✅ M谩s limpio, m谩s legible y m谩s f谩cil de mantener.


3️⃣ Multil铆nea con Template Strings

Antes, para escribir textos con varias l铆neas, hab铆a que usar \n o concatenaciones. Con las template strings, simplemente puedes escribir texto multil铆nea directamente:

const poema = `Las rosas son rojas,
las violetas azules,
el c贸digo es bello,
y t煤 lo haces en React.`;

console.log(poema);
  

馃尭 Ideal para cadenas largas, HTML din谩mico o mensajes formateados.


4️⃣ Expresiones dentro de Template Strings

Tambi茅n puedes incluir expresiones y resultados de funciones directamente dentro de una cadena:

const precio = 120;
const descuento = 0.15;
const total = `Precio final: $${precio - (precio * descuento)}`;

console.log(total);
// "Precio final: $102"
  

馃挕 Cualquier expresi贸n v谩lida de JavaScript puede usarse dentro de ${ }.


5️⃣ Template Strings en React

En React, las cadenas de plantillas son muy 煤tiles para generar clases, estilos o contenido din谩mico:

// Ejemplo de uso en un componente React
function Welcome({ user }) {
  return (
    <h2>{`¡Bienvenido, ${user.nombre}! Tu rol es ${user.rol}.`}</h2>
  );
}

const user = { nombre: "Mar铆a", rol: "Administrador" };
  

馃З Esto permite combinar variables y texto de manera m谩s fluida dentro del JSX.


6️⃣ Template Strings y HTML din谩mico

Tambi茅n puedes construir estructuras HTML con variables:

const titulo = "Curso de ES6";
const autor = "Jorge Ferreira";

const html = `
  <article>
    <h1>${titulo}</h1>
    <p>Autor: ${autor}</p>
  </article>
`;

document.getElementById("demo").innerHTML = html;
  

馃 Muy 煤til para generar bloques din谩micos desde JavaScript o frameworks frontend.


7️⃣ Resumen

  • ✔️ Usan `backticks` en lugar de comillas simples o dobles.
  • ✔️ Permiten incrustar variables con ${variable}.
  • ✔️ Soportan texto multil铆nea sin caracteres de escape.
  • ✔️ Ideales para HTML o strings din谩micos en React.

馃殌 Las template strings hacen tu c贸digo m谩s legible, moderno y potente.

Publicar un comentario

0 Comentarios