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
  • Utilizando un componente
  • Comunicación entre componentes
  • El estado de un componente
  1. React

Componentes

En React se introduce el concepto de componentes para crear la interfaz gráfica de nuestra aplicación.

El objetivo es que cada componente sea independiente y encapsule su markup (JSX), sus estilos (CSS) y su estado (JavaScript). De esa forma los componentes pueden ser reutilizables y la interfaz gráfica más fácil de mantener y evolucionar.

Definiendo un componente

Existen dos formas de definir componentes en React: con funciones o con clases. Sin embargo, cada vez se utilizan más los componentes función que los componentes de clase, así que utilizaremos por defecto componentes de función y dedicaremos una guía completa a componentes de clase.

La forma de definir una componente función es la siguiente:

function Title() {
  return <h1>Hola Mundo</h1>;
};

Nota: También podemos utilizar una función flecha para definir un componente.

Para retornar JSX en múltiples líneas podemos encerrar todo entre paréntesis:

function Title() {
  return (
    <header className="main">
      <h1>Hola Mundo</h1>
    </header>
  );
}

Utilizando un componente

Para utilizar un componente debes importarlo y después incluirlo en tu JSX como se muestra en el siguiente ejemplo:

import React from "react";
import Title from "./Title"; // importarlo

function App() {
  // incluirlo
  return <Title />;
}

Comunicación entre componentes

Todo componente recibe un objeto llamado props con los atributos que se le pasan a través de JSX. Por ejemplo, podemos pasar un atributo name al componente Welcome (que en un momento vamos a definir):

<Welcome name="Pedro" />
<Welcome name="Juan" />

En los componentes función los props se reciben como un parámetro de la función:

function Welcome(props) {
  return <h1>{props.name}</h1>;
};

Generalmente se utiliza destructuración para recibir los props:

function Welcome({ name }) {
  return <h1>{name}</h1>;
}

El estado de un componente

Opcionalmente, un componente puede tener uno o más estados para almacenar información (temporal). Por ejemplo, dentro de un estado podemos almacenar un contador que vamos a incrementar cada vez que oprimamos un botón.

El estado se crea a través de la función useState, que retorna un arreglo con dos elementos: el estado y una función para modificar ese estado.

Nota: a useState se le conoce como un hook en React, hablaremos de hooks en una guía más adelante.

import React, { useState } from "react";

function Welcome() {
  const [title, setTitle] = useState("Hola Mundo")

  return <h1>{title}</h1>;
}

En este ejemplo estamos definiendo un componente llamado Welcome que inicializa el estado con el string "Hola Mundo". El estado también puede ser un número, un booleano, un arreglo o un objeto.

El estado nunca se modifica directamente, siempre se debe modificar con la función que encontramos en el segundo elemento del arreglo (setTitle en nuestro caso). Cada vez que se cambia el estado, React vuelve a renderizar (pintar) el componente en la vista.

// correcto
setTitle("Hello World");

// incorrecto (el componente no se actualiza)
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 una función updateText que vamos a invocar cuando hagan click sobre el h1:

function Welcome() {
  const [title, setTitle] = useState("Hola Mundo")

  function updateText() {
    setTitle("Hello World")
  }

  return <h1 onClick={updateText}>{title}</h1>;
}

Veamos el mismo ejemplo en Codepen, haz click sobre el h1:

PreviousJSXNextMás sobre estado

Last updated 2 years ago