Botón para abrir el Menú Botón para cerrar el Menú
Logo da empresa Alura
Iniciar Sesión Nuestros Planes
Formaciones Conoce a Luri
  • Programación _
  • Front End _
  • Data Science _
  • DevOps _
  • Innovación y Gestión _
Artículos de Tecnología > Front-end

Estados globales: diferencias entre Redux y Context API

matheus-alberto
matheus-alberto
3 de Fevereiro

Compartir

Mira este artículo:
  1. Introducción
  2. Principales diferencias entre las herramientas.
  3. Condensando las diferencias
  4. Conclusión

capa

Introducción

Este artículo discutirá las principales diferencias entre las dos herramientas más utilizadas para administrar estados globales de una aplicación en React, así como sus funcionalidades y ejemplos de uso.

¡Cuando termines de leer este artículo podrás elegir la mejor opción para tu proyecto!

Contenido

  • ¿Qué son Redux y Context API?
  • Las diferencias entre las herramientas;
  • Ejemplos de uso.

¿Qué es Redux y para qué sirve?

Ampliamente utilizadas en React, Redux y Context API son herramientas que tienen como objetivo gestionar estados globales, como, por ejemplo, variables y funciones de una aplicación.

Pero ¿por qué necesitarías gestionar los estados globales de una aplicación? Primero, revisemos cómo funcionan los estados de un componente de React .

Veamos el siguiente componente:

import React, { useState } from "react";
import "./Flexin.css"; 
export default function Flexin() {
  const [text, setText] = useState("Hello World");
  return (
    <div className="container">
      <p className="text">{text}</p>
      <input
        className="input"
        type="text"
        onChange={(e) => setText(e.target.value)}
        placeholder="Digita un texto"
        value={text}
      />
    </div>
  );
}

En este componente, la variable text tiene un estado variable, es decir, con cada nuevo contenido ingresado en TextInput la variable, text su contenido también cambiará. Para ello, lo usamos useState() para controlar el estado de esta variable. Más específicamente la función setText()que le asigna useState().

Bien, ¿y cuál es el problema?

Bueno, el problema comienza cuando necesitamos cambiar el estado de esta variable fuera de este componente. Una cosa muy importante para recordar es que para cambiar el valor (o estado) de la variable text necesitamos la función setText()y solo es accesible dentro de este componente.

Una forma de "resolver" este problema es pasar la función a un componente setText(). Por ejemplo:

<MiComponente setText={setText}/>

El problema se vuelve más crítico cuando tenemos más componentes dentro de otros ( nesting ). Diferentes páginas que pueden cambiar el estado de esta variable también necesitan recibir esta función. Si la aplicación crece mucho y varios componentes pueden/deben cambiar el estado de esta variable, más atrapados e interconectados estarán estos componentes.

Esto es muy peligroso, porque la idea de crear componentes es principalmente mejorar la reutilización e incluso aislar comportamientos, dejándolos lo más independientes posible. Con la solución actual, los componentes que ni siquiera tienen la función de cambiar esa variable necesitan recibir esta función, porque necesitan pasarla a otro componente más adelante.

Para afrontar mejor estas situaciones en las que los componentes necesitan cambiar el estado de algo fuera de ellos, se crearon las herramientas Redux y Context API , introduciendo así también el concepto de variables globales.

Principales diferencias entre las herramientas.

Ahora que conocemos la función de estas herramientas, podemos discutir las principales diferencias entre ellas. Comencemos con Redux .

Redux

Redux es una biblioteca de JavaScript, lo que significa que se puede usar fuera de React . Para comenzar a usar Redux, es necesario comprender algunos conceptos:

  • Actions;
  • Reducers;
  • Store;
  • Dispacht.

Estos conceptos llenarían un artículo, por eso ofrecemos un resumen muy sucinto:

  • Actions son funciones que cambian algún estado dentro de la aplicación.
  • Reducers son funciones que reciben un estado y lo actualizan con la adecuada action.
  • Store es donde se almacenan los estados.
  • Dispatch es quien presta atención a los eventos dentro de la aplicación (es un detector de eventos de Redux) . En otras palabras, cuando se llama a un evento (un clic en un botón, por ejemplo), ejecuta un reducer con la action adecuada .

flujo-redux

Cuando se presiona el botón "deposit", lleva el evento de clic a dispatch, donde la acción de depósito se envía a la tienda. Dentro de la tienda, la función reducer cambia el estado del valor de la cuenta con la acción recibida por dispatch, cambiando el valor que aparece en pantalla.

Los usos de Redux son:

  • control de aplicaciones que necesitan cambios de estado con alta frecuencia;
  • cuando hay muchos estados que controlar;
  • La lógica para actualizar un estado es muy compleja.

Desventajas de Redux :

  • necesita varios pasos para implementar;
  • Es una herramienta demasiado compleja para proyectos más simples.

Por lo tanto, las aplicaciones más pequeñas pueden beneficiarse de una solución más sencilla, Context API.

API de contexto

La Context API es una herramienta nativa de React, lo que facilita su uso y elimina la necesidad de instalar paquetes.

Es más sencillo de empezar a utilizar y más centrado en pasar propiedades a componentes sin preocuparse por los niveles de anidamiento (componentes dentro de otros componentes).

Para comenzar a usar *contexto , primero debe declarar las propiedades que se pasarán a otros componentes.

Veamos un ejemplo de propiedades:

export const cuenta = {
  corriente: {
    saldo: 1000,
  },
  ahorro: {
    saldo: 5000,
  }
};

Luego, crea un context con el valor predeterminado:

export const CuentaContext = React.createContext(cuenta.corrente);

Para usarlo en un componente, llame a un componente consumer y, dentro de él, llame al componente al que le gustaría pasarle la información:

// app.js
import { CuentaContext } from "./cuenta-context";
<CuentaContext.consumer>
  <MuestraSaldo/>
</CuentaContext.consumer>
// muestraSaldo.js
import React from "react";
export default MuestraSaldo()  {
  let cuenta = this.context;
  return (
    <Text>cuenta.saldo</Text>
  )
}

En este ejemplo evitaremos demasiados detalles. Nuestro objetivo es mostrar que la estructura mínima necesaria para que el contexto funcione es mucho más pequeña que la de Redux .

Los usos de context :

  • aplicaciones que necesitan acceder a propiedades globalmente en otros componentes.
  • Aplicaciones React.

Desventajas:

  • cuando es necesario pasar muchas propiedades/objetos a varios componentes.
  • cuando la aplicación tiene múltiples reglas comerciales que necesitan cambiar múltiples estados de propiedad/objeto.

Condensando las diferencias

Resumamos brevemente las diferencias entre las dos herramientas.

Redux

Usamos Redux en los casos en que:

  • Aplicaciones que necesitan cambiar de estado con alta frecuencia;
  • Aplicaciones con muchos estados a controlar;
  • La lógica para actualizar un estado es muy compleja.

Desventajas de Redux

Las preguntas importantes sobre Redux son:

  • La implementación requiere varios pasos;
  • Herramienta muy compleja para proyectos más simples.

Context API

Usamos context en:

  • Aplicaciones que necesitan acceder a propiedades globalmente en otros componentes;
  • Aplicaciones React.

Desventajas

La API Context deja de ser interesante cuando:

  • Es necesario pasar muchas propiedades/objetos a diferentes componentes;
  • La aplicación tiene varias reglas comerciales que necesitan cambiar varios estados de propiedad/objeto.

Conclusión

En definitiva, es ese dicho: cada herramienta tiene su propia situación de uso. No existe una solución perfecta para todos los problemas, por lo que durante la planificación inicial del proyecto, es importante decidir qué herramienta se adapta mejor a los requisitos.

Utilice este artículo para decidir qué solución funciona para su aplicación.

¡Muchas gracias por tu tiempo y aprovecha para ver otros contenidos de la plataforma!

Si quieres aprender más de estas tecnologías aquí te dejo el link de esta Formación de React.

Artículo adaptado y traducido por Daysibel Cotiz.

perfil-instructor

Matheus Alberto

Licenciado en Sistemas de Información por la FIAP y en Diseño Gráfico por la Escola Panamericana de Artes e Design. Trabajo como desarrollador e instructor en Alura. En mi tiempo libre soy artista/ilustrador.

Artículo Anterior
React: validación de formulario con React Hook Form
Siguiente Artículo
¿Cómo aplicar validación a formularios reactivos en Angular?

Ver otros artículos sobre Front-end

Navegación

  • Planes
  • Instructores
  • Blog
  • Política de privacidad
  • Términos de uso
  • Sobre nosotros
  • Preguntas frecuentes

¡CONTÁCTANOS!

  • ¡Quiero entrar en contacto!

Blog

  • Programación
  • Data Science
  • Front End
  • Innovación y Gestión
  • DevOps

AOVS Sistemas de Informática S.A CNPJ 05.555.382/0001-33

SÍGUENOS EN NUESTRAS REDES SOCIALES

YouTube Facebook Instagram Linkedin Whatsapp Spotify

NOVEDADES Y LANZAMIENTOS

Aliados

  • Programa de aceleração Scale-Up Endeavor
  • En Alura somos unas de las Scale-Ups seleccionadas por Endeavor, programa de aceleración de las empresas que más crecen en el país.
  • Growth Academy 2021 do Google For Startups
  • Fuimos unas de las 7 startups seleccionadas por Google For Startups en participar del programa Growth Academy en 2021
Alura

Powered by

Caelum

AOVS Sistemas de Informática S.A CNPJ 05.555.382/0001-33

SÍGUENOS EN NUESTRAS REDES SOCIALES

YouTube Facebook Instagram Linkedin Whatsapp Spotify

Cursos

Cursos de Programación
Lógica de Programación | Java
Cursos de Front End
HTML y CSS | JavaScript | React
Cursos de Data Science
Data Science | Machine Learning | Excel | Base de Datos | Data Visualization | Estadística
Cursos de DevOps
Docker | Linux
Cursos de Innovación y Gestión
Transformación Ágil | Marketing Analytics

Alura

  • Educação em Tecnologia

    • logo fiap FIAP
    • logo casa do codigo Casa do Código
    • logo pm3 PM3 - Cursos de Produto
  • Mais Alura

    • logo alura start START BY Alura
    • logo alura lingua Alura Língua
    • logo alura para empresas Alura Para Empresas
    • logo alura latam Alura LATAM
  • Comunidade

    • logo tech guide Tech Guide
    • logo 7 days of code 7 days of code
    • logo Hipsters ponto Jobs Hipsters ponto Jobs
  • Podcasts

    • logo Hipster Network Hipster Network
    • logo Hipsters ponto Tech Hipsters ponto Tech
    • logo Dev sem fronteiras Dev sem Fronteiras
    • logo Like a Boss Like a Boss
    • logo IA Sob Controle IA Sob Controle
    • logo Mesa de Produto Mesa de Produto
    • logo Decode Decode
    • logo FIAPCast FIAPCast