Skip to content

Componentes en React

En React, los componentes son la base del desarrollo de aplicaciones. Permiten dividir la interfaz de usuario en piezas independientes, reutilizables y organizadas. Cada componente se encarga de una parte específica de la UI, lo que facilita el mantenimiento y la ampliación de la aplicación.

¿Qué es un componente?

Un componente en React es una pieza de código que describe qué debe renderizarse en la pantalla. Es como una función que toma entradas (llamadas props) y devuelve elementos React que describen la apariencia de la UI.

Ventajas de usar componentes

  • Reutilización: Los componentes pueden ser utilizados múltiples veces en diferentes partes de la aplicación.
  • Organización: Dividen la aplicación en piezas pequeñas y manejables.
  • Modularidad: Facilitan la separación de responsabilidades y el trabajo en equipo.

Tipos de componentes

React admite dos tipos principales de componentes: funcionales y de clase. En proyectos modernos, los componentes funcionales son la norma gracias a los hooks.

Componentes funcionales

Son funciones de JavaScript que devuelven elementos React. Se utilizan para componentes simples y modernos.

Ejemplo:

jsx
import React from 'react';

function Greeting(props) {
  return <h1>Hola, {props.name}</h1>;
}

export default Greeting;

Características:

  • Son más sencillos y fáciles de leer.
  • Utilizan hooks para manejar estado y efectos secundarios.

Uso:

jsx
import Greeting from './Greeting';

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

Componentes de clase

Son clases de JavaScript que extienden React.Component. Se usaban antes de la introducción de los hooks para manejar el estado y el ciclo de vida del componente.

Ejemplo:

jsx
import React, { Component } from 'react';

class Greeting extends Component {
  render() {
    return <h1>Hola, {this.props.name}</h1>;
  }
}

export default Greeting;

Características:

  • Pueden manejar estado utilizando this.state.
  • Incluyen métodos para controlar el ciclo de vida.

Uso:

jsx
import Greeting from './Greeting';

function App() {
  return <Greeting name="María" />;
}

Props: Pasando datos entre componentes

Props (abreviación de "propiedades") son datos que se pasan desde un componente padre a un componente hijo. Son inmutables y se utilizan para personalizar el contenido y el comportamiento del componente.

Ejemplo:

jsx
function Welcome(props) {
  return <h1>Bienvenido, {props.username}</h1>;
}

function App() {
  return <Welcome username="Carlos" />;
}

Props predeterminadas

Puedes establecer valores predeterminados para las props:

jsx
function Welcome({ username = "Invitado" }) {
  return <h1>Bienvenido, {username}</h1>;
}

State: Gestionando el estado interno

El state (estado) es una característica que permite que un componente mantenga y actualice su propio estado interno. Los componentes funcionales manejan el estado con hooks como useState.

Ejemplo con useState:

jsx
import React, { useState } from 'react';

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

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

export default Counter;

Ciclo de vida de los componentes de clase

Los componentes de clase tienen métodos para manejar el ciclo de vida. Estos métodos se ejecutan en diferentes etapas de la existencia del componente:

  1. Montaje: Cuando el componente se agrega al DOM.

    • constructor
    • componentDidMount
  2. Actualización: Cuando cambian las props o el estado.

    • componentDidUpdate
  3. Desmontaje: Cuando el componente se elimina del DOM.

    • componentWillUnmount

Ejemplo:

jsx
class Timer extends React.Component {
  constructor(props) {
    super(props);
    this.state = { seconds: 0 };
  }

  componentDidMount() {
    this.timerID = setInterval(() => this.tick(), 1000);
  }

  componentWillUnmount() {
    clearInterval(this.timerID);
  }

  tick() {
    this.setState((state) => ({ seconds: state.seconds + 1 }));
  }

  render() {
    return <p>Segundos: {this.state.seconds}</p>;
  }
}

export default Timer;

Comunicación entre componentes

De padre a hijo

La comunicación se realiza pasando props:

jsx
function Child({ message }) {
  return <p>{message}</p>;
}

function Parent() {
  return <Child message="Hola desde el padre" />;
}

De hijo a padre

Se realiza utilizando callbacks.

jsx
function Child({ onMessage }) {
  return <button onClick={() => onMessage("Hola, padre")}>Enviar mensaje</button>;
}

function Parent() {
  const handleMessage = (msg) => alert(msg);

  return <Child onMessage={handleMessage} />;
}

Conclusiones

Los componentes son el corazón de React. Al combinarlos con props y state, puedes construir interfaces de usuario interactivas, modulares y reutilizables. Dominar los diferentes tipos de componentes y su comunicación es esencial para desarrollar aplicaciones React de calidad.