Este post asume que estás familiarizad@ con la creación de un proyecto React. Si no es así, te sugiero leas este post primero
Introducción
ReactJS se presenta como una librería reactiva, declarativa y basada en componentes.
La idea, por tanto, es que pensemos en nuestras vistas como un conjunto de pequeñas partes capaces de contener valores (componentes) que se combinan para crear porciones del total de la vista que tienen la capacidad de modificarse de forma dinámica (reactiva).
Los nombres de los componentes y las funciones utilizadas para modificar los valores que contienen deben ser lo más descriptivos posible para que, sin necesidad de leer cómo, seamos capaces de entender qué hacen (declarativa).
Para lograrlo, se aplican tres conceptos: Componente, State y Props y VirtualDOM.
Componente
El concepto de Componente en React es una adaptación de los Componentes Web, por lo que es imprescindible primero entender estos para luego hablar de aquellos.
Los Componentes Web son un paquete de diferentes tecnologías que te permiten crear elementos personalizados reutilizables — con su funcionalidad encapsulada apartada del resto del código — y utilizarlos en las aplicaciones web.
Mozilla MDN
¿Qué quiere decir esto? Básicamente, implica usar JavaScript para generar objetos que contengan valores que usaremos para insertar en el DOM (Document Object Model) nodos que indiquen qué etiqueta HTML, con qué contenido y propiedades CSS se debe mostrar en la ventana del navegador.
Un Componente en React, entonces, es un elemento capaz de contener información y generar una vista en la ventana del navegador.
En React se pueden crear dos tipos de Componente: los Componentes de Clase y los Componentes Funcionales
 |
Componente de Clase |
 |
Componente Funcional |
En la actualidad, el trabajo con React se hace íntegramente a través de Componentes Funcionales pero para entender cómo es esto posible (y por cuestiones de compatibilidad con proyectos anteriores) vamos a explicar los dos tipos de Componentes.
Componente de Clase
Más arriba definimos a los Componentes como elementos que tiene su funcionalidad aislada del resto de los elementos. Esta funcionalidad es la que maneja qué vista se va a estar mostrando en la ventana del navegador.
React surgió en el año 2013 como una librería que ofrecía la posibilidad de automatizar el funcionamiento de los Componentes y, para lograrlo, creó los Componentes de Clase.
Un Componente de Clase se caracteriza por utilizar el concepto de Clase proveniente de la Programación Orientada a Objetos para poder almacenar un objeto especial denominado state.
El objeto state es usado por React para saber cuándo hay que cambiar la vista. Es decir que, al momento de generar la funcionalidad de nuestros Componentes, lo que buscamos es modificar los valores almacenados en el state para que React actualice la vista en la ventana del navegador.
Los Componentes de Clase son los únicos que tienen la capacidad de almacenar al objeto state.
Componente Funcional
Debido a la naturaleza de la librería, y al hecho de que un Componente Funcional no es capaz de almacenar al objeto state, durante mucho tiempo existió una división entre los usos de los Componentes.
Los Componentes de Clase albergaban la lógica de modificación de state y el almacenamiento de los datos a mostrar y los Componentes Funcionales, denominados así porque se crean utilizando funciones, se encargaban del trabajo de renderizado y toda la lógica pertinente.
A partir de la versión 16.8 (año 2019), y gracias a la aparición de los Hooks, es posible producir un Componente Funcional que tenga la capacidad de avisarle a React que es necesario actualizar la vista, es decir, aplicar el funcionamiento del objeto state.
Es de suma importancia entender que el uso de los Hooks, bajo ningún concepto, implica que los Componentes Funcionales tengan la capacidad de almacenar objeto state. Eso es algo que solo pueden hacer los Componentes de Clase. Aunque lo cierto es que, gracias a los Hooks ya no tenemos la necesidad de crear un Componente de Clase para poder aplicar lógica de modificación y almacenamiento de datos. Esto demostró ser una gran ventaja para los usuarios de la librería porque, como escritores del Lenguaje JavaScript, el tener que escribir Componentes de Clase era algo a lo que no terminábamos de acostumbrarnos.
¿Cómo trabajan los Componentes?
Todos los Componentes se pueden dividir en dos partes: la lógica de datos y el renderizado de los mismos.
La lógica de datos son las funciones/variables que vamos a utilizar para generar datos, mientras que el renderizado es la creación de los elementos que queremos mostrar.
El trabajo con la lógica de datos está sumamente ligado al state y las props aunque es posible crear lógica de datos que no los use.
El renderizado lo logramos trabajando con JSX y CSS.
Todos los Componentes deben tener un return (los Componentes de Clase deben tener una función render para este return), en el que podamos agregar nuestro código JSX (recordemos que JSX nos permite escribir elementos de React como si estuviéramos trabajando con HTML).
Algo a tener en cuenta cuando trabajamos con JSX en el return es que ninguna función (y sí, los Componentes son funciones) tiene la capacidad de retornar más de un elemento.
Si deseamos hacer una vista con varios elementos, es necesario crear un contenedor div (<div>…</div>) o un fragmento (<>…</>) y dentro agregar todos los elementos deseados.
Además, para agregar clases de CSS hay que emplear el “atributo” className.
Antes de ver cómo trabajar con el state y las props te invito a que te animes a crear las primeras vistas usando Componentes de React.
Redes