Guías de Make it Real
  • Introduction
  • Preparación
    • Conceptos básicos
    • El editor de texto
    • La línea de comandos
    • Git y Github
  • Git
    • Instalación y configuración
    • Conceptos y comandos esenciales
    • Ignorando archivos y carpetas
    • Trabajando con ramas
    • Repositorios remotos
    • Etiquetas
    • Reescribiendo la historia
    • Stashing
    • Github
  • HTML y CSS
    • Introducción a HTML
    • Introducción a CSS
    • Más elementos de HTML
    • Tablas
    • Formularios
    • El modelo de caja en CSS
    • Fondos (backgrounds)
    • Posicionamiento
    • Selectores CSS
    • Bordes, sombras y gradientes
    • Media Queries
    • Unidades en CSS
    • Flexbox
  • Bootstrap 3
    • Primeros pasos
    • Elementos básicos de HTML
    • Componentes
    • La grilla
    • Personalizando Bootstrap
    • Utilizando plantillas
  • Bootstrap 4
    • Primeros pasos
    • Elementos básicos de HTML
    • Componentes
    • La grilla
    • Clases utilitarias
    • Personalizando Bootstrap
  • Ruby
    • Primeros pasos
    • Tipos y operadores
    • Variables y entrada de usuario
    • Condicionales
    • Ciclos
    • Arreglos
    • Más cadenas de texto
    • Hashes
    • Métodos
    • Manipulación de archivos
    • Gemas
  • Programación Orientada a Objetos en Ruby
    • Clases y objetos
    • Métodos y atributos de clase
    • Herencia
    • Módulos
    • Excepciones
  • JavaScript I
    • Primeros pasos
    • Tipos y operadores
    • Variables
    • Condicionales
    • Ciclos
    • Arreglos
    • Más cadenas de texto
    • Funciones
    • Objetos literales
    • Manipulación de archivos
  • JavaScript en el navegador
    • Primeros pasos
    • Manipulando HTML
    • Escuchando eventos
    • Local Storage
    • History API
    • Canvas
    • Notificaciones Web
    • Audio y Video
    • Arrastrar y soltar
    • JSON
    • Realizando peticiones HTTP
  • jQuery
    • Primeros pasos
    • Manipulando HTML
    • Escuchando eventos
    • Plugins
    • Realizando peticiones con AJAX
  • JavaScript II
    • Prototipos
    • Librerías (Node.js)
    • ES6
    • Uso de this (call, apply, bind)
    • Programación funcional
    • Scope, hoisting, closures
    • Programación asincrónica
    • Testing
  • HTTP y Sinatra
    • Primeros pasos con Sinatra
    • El protocolo HTTP
    • Rutas
    • Formularios
    • Cookies y sesión
  • Bases de datos
    • Bases de datos relacionales
    • SQL
    • DDL
    • MongoDB
  • Ruby on Rails I
    • Primeros pasos
    • Arquitectura
    • Rutas
    • Layouts y rendering
    • ActiveRecord - Modelos
    • ActiveRecord - Migraciones
    • ActiveRecord - Validaciones
    • ActiveRecord - Asociaciones
    • ActiveRecord - Scopes
    • ActiveRecord - Callbacks
    • Recursos REST
    • Formularios
    • Autenticación con Devise
    • Sass y Bootstrap
    • Envío de correos
    • Carga de imágenes
    • Seeds
    • Heroku
  • Ruby on Rails II
    • Usando JavaScript (y jQuery) en Rails
    • Testing en Ruby
    • Testing en Rails
    • Creando una Web API
    • Web Sockets
  • Express.js
    • Primeros Pasos
    • El protocolo HTTP
    • Rutas
    • Vistas
    • Middlewares y manejo de errores
    • Formularios
    • Cookies y sesión
  • Express.js II
    • Mongoose
    • Web Sockets
    • Autenticación
    • Envío de correos
    • Cargar imágenes
    • Deployment
    • Testing
    • Creando una Web API
  • React
    • Primeros pasos
    • JSX
    • Componentes
    • Más sobre estado
    • Formularios
    • Peticiones HTTP con Axios
    • React Hooks
    • React Context
    • React Bootstrap
    • React Router
    • Carga de Imágenes
    • Testing
    • Estructura de carpetas
    • Componentes de clase
  • Redux
    • Primeros pasos
    • Action creators
    • Usando la librería react-redux
    • Middlewares
    • Operaciones asincrónicas con redux-thunk
    • Combinando funciones reductoras
    • Testing
    • Redux Tool Kit
  • Algoritmos
    • Describiendo un algoritmo
    • Complejidad (Big-O)
    • Estructuras de datos
    • Recursión
    • Ordenamiento
    • Búsqueda
    • Programación dinámica
  • Python
    • Primeros Pasos
    • Tipos y Variables
    • Funciones
    • Control de Flujo
    • Listas
    • Ciclos
    • Diccionarios, Tuplas y Sets
  • NumPy
    • Primeros Pasos
    • Arreglos
    • Arreglos Multidimensionales
    • Estadística con NumPy
    • Distribución Estadística
  • Pandas
    • Primeros Pasos
    • Inspección y Selección de Datos
    • Modificando Dataframes
    • La Función Lambda
    • Aggregates en Pandas
    • Múltiples Tablas
Powered by GitBook
On this page
  • Definiendo un componente
  • Props
  • Estado
  • Métodos de cíclo de vida
  1. React

Componentes de clase

PreviousEstructura de carpetasNextRedux

Last updated 2 years ago

Aunque los componentes de clase han perdido popularidad y la comunidad de React recomienda utilizar componentes funcionales, aún existen proyectos que utilizan componentes de clases y por eso creamos esta guía.

Un reto interesante (y quiza una de las razones por las que los componentes de clase han perdido popularidad) es que para trabajar con componentes de clase debes saber lo siguiente:

  • Cómo definir una clase.

  • Qué es herencia.

  • Cómo definir un constructor.

  • Para qué se utiliza la palabra clave super.

  • Cómo utilizar this correctamente.

  • Para qué se utiliza el método bind.

Esto temas los puedes consultar en las guías de la sección .

Definiendo un componente

Para definir un componente de clase se debe extender Component y crear un método render que retorna el JSX:

import React, { Component } from 'react';

class Title extends Component {
  render() {
    return <h1>Hola mundo</h1>;
  }
}

Props

Para recibir props en un componente clase debemos crear un constructor que los reciba:

class Welcome extends Component {
  constructor(props) {
    super(props);
  }

  render() {
    return <h1>{this.props.name}</h1>
  }
}

Lo primero que hacemos en el constructor es llamar el constructor padre con los props, esto los almacena para que los podamos obtener con this.props.

Estado

A diferencia de los componentes funcionales que utilizan el hook useState para manejar el estado, los componente clase cuentan con un objeto llamado state donde vamos a almacenar nuestro estado.

Cada vez que cambia state (a través del método setState), React vuelve a renderizar el componente en la vista.

class Welcome extends Component {
  constructor() {
    super();

    this.state = {
      title: "Hola Mundo"
    };
  }

  render() {
    return <h1>{this.state.title}</h1>;
  }
}

En este ejemplo estamos definiendo un componente llamado Welcome que inicializa el estado con una llave title. En el método render estamos obteniendo el valor de esa llave con this.state.title.

Para cambiar el estado utilizamos el método setState:

this.setState({
  title: "Hello World"
});

Por ejemplo, podemos cambiar nuestro ejemplo anterior para que cuando hagan click sobre el h1 cambie el texto. Para eso vamos a definir un método updateText que vamos a invocar cuando hagan click sobre el h1:

class Welcome extends Component {
  constructor() {
    ...

    // tenemos que enlazar el método al contexto actual
    this.updateText = this.updateText.bind(this);
  }

  render() {
    return <h1 onClick={this.updateText}>{this.state.title}</h1>;
  }

  updateText() {
    this.setState({
      title: "Hello World"
    });
  }
}

Métodos de cíclo de vida

Una ventaja de los componentes de clase es que cuenta con métodos específicos para cada momento del ciclo de vida de un componente. Los más importantes son:

  • componentDidMount: se ejecuta justo después que se ha renderizado el componente, ideal para hacer llamados a API o cualquier otra inicialización que necesita el componente.

  • componentWillUnmount: se ejecuta antes de que el componente se remueve del DOM, cuando se va a "desmontar".

Estos métodos están definidos en React.Component y se sobrescriben en el componente. Por ejemplo:

import React, { Component } from 'react';

class Welcome extends Component {
  componentDidMount() {
    console.log("El componente ha sido montado");
  }

  componentWillUnmount() {
    console.log("El componente va a ser desmontado");
  }

  render() {
    // return JSX
  }
}

Otros métodos que podemos sobrescribir son los siguientes:

  • componentWillUpdate: se ejecuta antes de que el componente se va a volver a renderizar (p.e. porque se llamó setState o los props cambiaron).

  • shouldComponentUpdate: este método nos permite decidir si el componente se debe volver a renderizar, si retorna true se vuelve a renderizar, de lo contrario no se renderiza.

  • componentDidUpdate: se ejecuta después de que el componente se volvió a renderizar.

JavaScript II