Introducción a React y Preparación del Entorno

1

Aprende React: Desarrollo Web y Mobile Eficiente y Escalable

Fundamentos de Componentes y JSX

2

Creación de Componentes con JavaScript y React

3

Creación de Componentes Reutilizables con Props en React

Quiz: Fundamentos de Componentes y JSX

Manejo del Estado y Hooks Básicos

4

Estado Local en React: Uso de useState para Contadores

5

Creación y manejo de estados en un Toggle Button con React

6

Eventos y manejo de estado en React: name form interactivo

7

Uso de useEffect para Manejar Efectos Secundarios en React

Quiz: Manejo del Estado y Hooks Básicos

Estilización de Componentes

8

Estilos en React: CSS, SaaS y Módulos CSS

9

Estilos en Línea en React: Uso y Mejores Prácticas

10

Creación de Botones Reactivos con Styled Components en React

11

Instalación y Uso de Tailwind CSS en Proyectos Web

Quiz: Estilización de Componentes

Trabajo con Datos y APIs

12

Creación de Componentes con Datos Estáticos en React

13

Creación de un Componente User List con Fetch en React

14

Manejo de Errores y Carga en Fetch para Componentes React

15

Optimización de Fetch con useEffect y Dependencias en React

Quiz: Trabajo con Datos y APIs

Componentes Avanzados y Estado Global

16

Manejo de estados complejos en React con useReducer

17

Context API en React: Manejo de Estados Globales y Proveedores

18

Creación de Hooks Personalizados en React para Contadores Reutilizables

19

Optimización de Componentes en React con React.memo y Hooks

Quiz: Componentes Avanzados y Estado Global

Introducción a TypeScript en React

20

Componentes con TypeScript en React: Tipado de Props y Funciones

21

Tipado de Estados y Funciones en TypeScript para React

22

Tipado de useReducer y Context API en TypeScript

Quiz: Introducción a TypeScript en React

Nuevas Características de React 19

23

Novedades y Mejoras en React 19 para Desarrolladores

24

Fundamentos y Actualización Continua en React

No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Curso de React.js

Curso de React.js

Estefany Aguilar

Estefany Aguilar

Creación y manejo de estados en un Toggle Button con React

5/24
Recursos

El estado en React es un concepto fundamental que permite a los componentes mantener y actualizar datos a lo largo del tiempo. Comprender cómo funciona la actualización del estado y cómo afecta al renderizado de componentes es esencial para desarrollar aplicaciones React eficientes y reactivas. En esta guía, exploraremos estos conceptos a través de ejemplos prácticos, centrándonos en la creación de un componente Toggle Button que ilustra perfectamente estos principios.

¿Cómo funciona la actualización del estado en React?

Cuando trabajamos con estado en React, debemos tener presentes dos aspectos cruciales:

  1. La forma correcta de actualizar el estado: Nunca debemos modificar directamente la variable de estado, sino utilizar la función "setter" proporcionada por el hook useState.
  2. El proceso de renderizado: Cada vez que el estado cambia, React vuelve a renderizar el componente automáticamente.

Para ilustrar estos conceptos, vamos a crear un componente Toggle Button que cambia entre dos estados: activo e inactivo.

Creando un componente Toggle Button

Primero, necesitamos crear un nuevo archivo llamado ToggleButton.jsx con la estructura básica de un componente React:

import { useState } from 'react';

const ToggleButton = () => {
  // Aquí irá nuestro código
  
  return (
    // Aquí irá nuestro JSX
  );
};

export default ToggleButton;

Ahora, implementemos el estado utilizando el hook useState:

import { useState } from 'react';

const ToggleButton = () => {
  const [isActive, setIsActive] = useState(false);
  
  return (
    // Aquí irá nuestro JSX
  );
};

export default ToggleButton;

Es una buena práctica utilizar el prefijo "is" para variables de estado booleanas, ya que hace que el código sea más legible y autodocumentado. En este caso, isActive indica claramente que estamos trabajando con un estado que puede ser verdadero o falso.

Implementando la funcionalidad del toggle

Ahora, completemos nuestro componente con la funcionalidad para cambiar entre estados:

import { useState } from 'react';

const ToggleButton = () => {
  const [isActive, setIsActive] = useState(false);
  
  return (
    <button onClick={() => setIsActive(!isActive)}>
      {isActive ? 'Activo' : 'Inactivo'}
    </button>
  );
};

export default ToggleButton;

En este código:

  1. Creamos un botón con un evento onClick que ejecuta una función para actualizar el estado.
  2. Utilizamos setIsActive(!isActive) para invertir el valor actual del estado (de false a true o viceversa).
  3. Empleamos un operador ternario para mostrar "Activo" o "Inactivo" según el valor de isActive.

¿Por qué es importante usar la función setter?

Es fundamental entender que en React no debemos modificar directamente la variable de estado:

// ❌ INCORRECTO
isActive = !isActive;

// ✅ CORRECTO
setIsActive(!isActive);

Cuando utilizamos la función setter:

  1. React registra que el estado ha cambiado.
  2. Programa una actualización del componente.
  3. Renderiza nuevamente el componente con el nuevo valor del estado.

Este proceso garantiza que la interfaz de usuario se mantenga sincronizada con los datos de la aplicación.

Integrando el componente en nuestra aplicación

Para utilizar nuestro componente ToggleButton, debemos importarlo en nuestro componente App:

import ToggleButton from './ToggleButton';

function App() {
  return (
    <div className="App">
      <ToggleButton />
    </div>
  );
}

export default App;

Al ejecutar la aplicación, veremos un botón que inicialmente muestra "Inactivo". Cada vez que hacemos clic en él, su texto cambia entre "Activo" e "Inactivo", demostrando cómo React actualiza la interfaz de usuario en respuesta a los cambios de estado.

¿Cómo afecta el estado al renderizado de componentes?

Uno de los aspectos más poderosos de React es su capacidad para actualizar eficientemente la interfaz de usuario cuando cambia el estado. Cuando llamamos a setIsActive, React:

  1. Registra que el estado ha cambiado.
  2. Determina qué partes de la interfaz de usuario necesitan actualizarse.
  3. Actualiza solo esas partes específicas, en lugar de volver a renderizar toda la aplicación.

Este proceso, conocido como renderizado virtual, es lo que hace que React sea tan eficiente y rápido para construir interfaces de usuario interactivas.

En nuestro ejemplo del ToggleButton, cuando hacemos clic en el botón, React detecta el cambio en isActive y actualiza solo el texto dentro del botón, sin afectar al resto de la aplicación.

El estado en React es una herramienta poderosa que nos permite crear componentes interactivos y dinámicos. Comprender cómo actualizar correctamente el estado y cómo afecta al proceso de renderizado es esencial para desarrollar aplicaciones React eficientes. A través del ejemplo del ToggleButton, hemos visto estos conceptos en acción, demostrando la simplicidad y potencia del modelo de programación de React. ¿Has probado a modificar el ejemplo para mostrar emojis o íconos en lugar de texto? Comparte tus experimentos y dudas en los comentarios.

Aportes 18

Preguntas 0

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Mis Ejercicio en Componente 😅 ```js import { useState } from "react"; const ToggleButton = () => { const [isActive, setIsActive] = useState(false); return ( <button onClick={() => setIsActive(!isActive)}> {isActive ? "Activo ✅" : "Inactivo ⛔"} </button> ); }; export default ToggleButton; ```
Me está encantando estudiar en Platzi, actualmente trabajo utilizando React, pero estoy repasando conocimientos con este curso, y me hubiese gustado verlo cuando recién estaba aprendiendo esta tecnología
✅ Me encanta ![](https://i.postimg.cc/g0HwLRCj/active.gif)
![]()Mi humilde aporte :D Si no saben poner emojis está el atajo Windows + . ![](https://static.platzi.com/media/user_upload/image-42bf1757-e5c7-4a3b-aede-534c2b9c296b.jpg)
En mi caso continuo con la idea de la card de un producto de la clase pasada, asi que agregue un icono para "agregar" a favoritos. El archivo "AlarmaTemporal" es por que queria crear un pop up o algo parecido, PD: "No funciono" pero es por que aun no vemos el \[ useEffect ] Archivo Toggle: ```js import React, { useState } from "react" import AlertaTemporal from "./alerta_temporal"; const ToggleButton = () => { const [isActive, setIsActive] = useState(false); const Accion = () => { setIsActive(!isActive); } return (
<button onClick={Accion}> { isActive ? "💖": "💔" } </button> { isActive ? <AlertaTemporal mensaje="👍 Agregado a favoritos!" duracion={3000} />: <AlertaTemporal mensaje="❌ Eliminado de Favoritos!" duracion={3000} /> }
) } export default ToggleButton ```Archivo AlertaTemporal: ```js import { useEffect, useState } from "react"; const AlertaTemporal = ({mensaje, duracion}) => { const [visible, setVisible] = useState(true); useEffect(() => { const timer = setTimeout(() => { setVisible(flase); }, duracion); return () => clearTimeout(timer) }, [duracion]); if (!visible) return null; return (
{mensaje}
); } export default AlertaTemporal; ```
![](https://static.platzi.com/media/user_upload/image-74a462ff-aefa-4d8d-915b-0e0d799589e4.jpg)![]()
A partir de React 17, ya no es necesario importar React en cada archivo de componente, debido a que React ahora utiliza un nuevo transformador JSX. Este transformador permite que el código JSX se compile sin necesidad de que React esté explícitamente importado. Esto simplifica el código y mejora la legibilidad. Sin embargo, si usas características específicas de React (como `useState` o `useEffect`), aún necesitarás importarlas de la librería.
Este es mi aporte: ![](https://static.platzi.com/media/user_upload/image-b906c4da-7230-40c0-892a-bb9da11d9eb4.jpg)
Mi código: ```js import React, { useState } from 'react'; const ToogleButton = () => { const [emoji, setEmoji] = useState("😒"); return ( <button onClick={() => setEmoji(emoji == "😒" ? '😍' : '😒')}> {emoji} </button> ); } export default ToogleButton; ```
Este es mi aporte:😉 ![](https://static.platzi.com/media/user_upload/upload-e9aabe37-8d35-4acb-9698-fb2f08a7923d.png)
Mi versión :) `import { useState } from 'react'` `const ToggleButton = () => {    const [isActive, setIsActive] = useState(false)` `    return (        <button onClick={() => setIsActive(!isActive)}>            {isActive ? '🟢 ON' : '🔴 OFF'}        </button>    )}` `export default ToggleButton`
```js import React, { useState } from 'react' export const ToggleButton = () => { const [isActive, setIsActive] = useState(false); return (
<button onClick={() => setIsActive(!isActive)}> {isActive ? '😁' : '😒'} </button>
) } ```import React, { useState } from 'react' export const ToggleButton = () => {    const \[isActive, setIsActive] = useState(false);  return (    \
        \<button onClick={() => setIsActive(!isActive)}>            {isActive ? '😁' : '😒'}        \</button>    \
  )} Algo que quizás pueda servir, y de pronto nos lo expliquen mas adelante es que si estas usando Visual Studio cod es que cuando vayas a crear un componente puedes usar rafc para que el snnipet te autocomplete y no tengas que colocar el export default "nombre del componente sino que desde el inicio lo exportas
Con emojis: import { useState } from "react" export const ToggleButton = () => {    const \[isActive, setIsActive] = useState(false)     return (        \<button *onClick*={() => setIsActive(!isActive)}>            {isActive ? '😁👍' : '😔👎'}         \</button>    )}
![](https://static.platzi.com/media/user_upload/image-d911147e-5fd4-4562-b5cf-bc192462275f.jpg)![]()
Mi ejercicio ```js import { useState } from "react"; const Toggle = () => { const [isActive, isInactive] = useState(false); const Toggleclick = () => { isInactive(!isActive); }; return (

Push the button

Push the button for toggle

<button onClick={Toggleclick}> {isActive ? "Active 🟢" : "Inactive 🔴"} </button>

Component created by rarch-dev,
{" "} with React UseState

); }; export default Toggle; ```import { useState } from "react"; const Toggle = () => { const \[isActive, isInactive] = useState(false); const Toggleclick = () => { isInactive(!isActive); }; return ( \
\

Push the button\

\

Push the button for toggle\

\<button onClick={Toggleclick}> {isActive ? "Active 🟢" : "Inactive 🔴"} \</button> \

Component created by rarch-dev, \
{" "} \ with React UseState \ \

\
); }; export default Toggle;
Propuesta con íconos ```js import { useState } from "react"; const ToggleButton = () => { const [isActive, setIsActive] = useState(false); return ( <button onClick={() => setIsActive(!isActive)}> {isActive ? " Activo" : " Inactivo"} </button> ); }; export default ToggleButton; ```Llamamos a la libreria desde index.html ```js <html lang="en"> <head> <meta charset="UTF-8" /> <link rel="icon" type="image/svg+xml" href="/vite.svg" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Vite + React</title> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.7.2/css/all.min.css" integrity="sha512-Evv84Mr4kqVGRNSgIGL/F/aIDqQb7xQ2vcrdIwxfjThSH8CSR7PBEakCr51Ck+w+/U6swU2Im1vVX0SVk9ABhg==" crossorigin="anonymous" referrerpolicy="no-referrer" /> </head> <body>
<script type="module" src="/src/main.jsx"></script> </body> </html> ```
Mi solución al ejercicio![](https://static.platzi.com/media/user_upload/image-35ce837f-ce2d-4b3b-8c7f-3588a8cba83b.jpg) ![](https://static.platzi.com/media/user_upload/image-9f72a848-ab21-4129-8055-117ccd9b5fc7.jpg)![](https://static.platzi.com/media/user_upload/image-c863b2cc-02a5-4fa2-97f0-cc7eb2454896.jpg)
Mis Ejercicio en componts import { useState } from "react";import { BsToggleOn, BsToggleOff} from 'react-icons/bs'; const ToggleButton = () => {  const \[isActive, setIsActive] = useState(false);   return (    \<button onClick={() => setIsActive(!isActive)}>      {isActive ? (  <> \<BsToggleOn color="green"/> \😄\ \ ) : ( <> \<BsToggleOff color="red"/> \😢\ \)}    \</button>  ) };export default ToggleButton;