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

Estado Local en React: Uso de useState para Contadores

4/24
Recursos

El estado en React es un concepto fundamental que permite a los desarrolladores almacenar y manipular información dentro de sus aplicaciones. A través del uso de estados locales, podemos crear componentes dinámicos que responden a las interacciones del usuario y actualizan la interfaz de manera eficiente. Dominar el manejo de estados es esencial para cualquier desarrollador que busque crear aplicaciones React robustas y reactivas.

¿Qué es el estado en React y por qué es importante?

El estado en React es un mecanismo para almacenar información que puede cambiar durante el ciclo de vida de un componente. Podemos visualizarlo como cajas de almacenamiento donde guardamos datos específicos que nuestros componentes necesitan para funcionar correctamente.

Existen dos tipos principales de estados:

  • Estado local: Información almacenada a nivel de componente, accesible solo dentro del componente donde se define.
  • Estado global: Información compartida entre múltiples componentes de la aplicación.

En esta ocasión, nos enfocaremos en el estado local, que nos permite mantener información dentro de un componente específico y actualizarla según sea necesario.

El hook useState: la herramienta para manejar estados locales

React proporciona una herramienta especial llamada useState, que es un hook que nos permite implementar estados locales en nuestros componentes funcionales. Este hook nos devuelve:

  1. Una variable para leer el valor actual del estado
  2. Una función para actualizar ese valor

La sintaxis básica es:

const [valor, setValor] = useState(valorInicial);

Donde:

  • valor es la variable que contiene el estado actual
  • setValor es la función que nos permite actualizar ese estado
  • valorInicial es el valor con el que comienza nuestro estado

¿Cómo crear un contador utilizando estados en React?

Vamos a crear un ejemplo práctico: un contador que nos permita incrementar y decrementar un valor utilizando estados locales.

Configuración del proyecto

Primero, creamos un nuevo proyecto de React:

npm create vite@latest myreact-app-state

Seleccionamos React como framework y JavaScript como variante. Luego instalamos las dependencias:

cd myreact-app-state
npm install
npm run dev

Creando nuestro componente contador

Dentro de nuestro proyecto, creamos una carpeta llamada components y dentro de ella un archivo Counter.jsx:

import { useState } from 'react';

const Counter = () => {
  const [count, setCount] = useState(0);

  return (
    <div>
      <h2>El contador está en: {count}</h2>
      <button onClick={() => setCount(count + 1)}>Incrementar</button>
      <button onClick={() => setCount(count - 1)}>Decrementar</button>
    </div>
  );
};

export default Counter;

En este componente:

  1. Importamos el hook useState desde React
  2. Creamos un estado local llamado count con valor inicial de 0
  3. Renderizamos el valor actual del contador
  4. Añadimos dos botones que modifican el estado al hacer clic

Implementando el contador en nuestra aplicación

Ahora, modificamos nuestro archivo principal App.jsx para incluir nuestro componente contador:

import Counter from './components/Counter';

function App() {
  return (
    <div>
      <Counter />
    </div>
  );
}

export default App;

Al ejecutar nuestra aplicación, veremos un contador que comienza en 0 y que podemos incrementar o decrementar con los botones correspondientes.

Entendiendo el flujo de actualización del estado

Cuando hacemos clic en el botón "Incrementar", ocurre lo siguiente:

  1. Se ejecuta la función setCount(count + 1)
  2. React actualiza el valor de count sumándole 1
  3. El componente se vuelve a renderizar con el nuevo valor
  4. La interfaz se actualiza mostrando el nuevo valor del contador

Este proceso es automático y es parte de la magia de React: cuando el estado cambia, los componentes que dependen de ese estado se actualizan automáticamente.

¿En qué otros casos podemos utilizar estados locales?

Los estados locales son extremadamente versátiles y pueden utilizarse en numerosos escenarios:

  • Formularios: Para almacenar los valores de los campos mientras el usuario los completa
  • Toggles: Para manejar estados de activado/desactivado (como menús desplegables)
  • Filtros: Para almacenar criterios de filtrado en listas o colecciones
  • Paginación: Para mantener el número de página actual
  • Cargas de datos: Para indicar si los datos están cargando, se han cargado correctamente o ha ocurrido un error

El manejo de estados es una habilidad fundamental en React que te permitirá crear interfaces dinámicas y reactivas. Dominar el uso de useState es solo el primer paso para aprovechar todo el potencial que React ofrece para el manejo de datos en tus aplicaciones.

¿Has pensado en otras aplicaciones prácticas para los estados locales en tus proyectos? ¿Quizás un carrito de compras, un sistema de notificaciones o un reproductor multimedia? Comparte tus ideas y experiencias en los comentarios.

Aportes 19

Preguntas 0

Ordenar por:

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

Exportar componentes con export NombreComponente en lugar de export default NombreComponente mejora la claridad y consistencia del código, ya que siempre se usa el mismo nombre al importarlo, evitando confusiones. Además, facilita la refactorización y el autocompletado en editores como VSCode. Con el export default puedes renombrar el componente y causar problemas
Un **pequeño aporte** para esas personas que les gusta ir un poco mas alla... Les **motivo** a todos a agregar una **pequeña funcionalidad** a su codigo, les propongo hacer que cuando el contador actual llegue a cero el boton de decrementar se **desactive** y asi no llegar a numeros negativos... Es algo avanzado a la clase, pero de esta forma se **motivan** a seguir **indagando mas**.... *<u>Si necesitan aca esta mi codigo con su funcionalidad agregada...</u>* ```js import { useState } from "react"; const Counter = () => { const [count, setCount] = useState(0); return( <section>

Contador

El estado actual es: {count}

<button onClick={() => setCount(count + 1)}>Incrementar</button> { count <= 0 ? <button disabled>Decrementar</button> : <button onClick={() => setCount(count - 1)}>Decrementar</button> } </section> ) } export default Counter; ```import { useState } from "react"; const Counter = () => {const \[count, setCount] = useState(0); return( \<section> \

Contador\

\

El estado actual es: {count}\

\<button onClick={() => setCount(count + 1)}>Incrementar\</button> { count <= 0 ? \<button disabled>Decrementar\</button> : \<button onClick={() => setCount(count - 1)}>Decrementar\</button> } \</section> )} export default Counter;
Hola Devs, les traigo una guía paso a paso con ejemplos para dominar `useState`, el Hook más usado en React. 🚀 <https://www.urianviera.com/reactjs/domina-el-hook-usestate>
Esta lección yo la he visto trabajar o mejor dicho es muy util en carritos de compra.
Aquí otra forma de deshabilitar el botón de decrementar cuando el contador llega a 0, utilizando el mismo state count: ```js import { useState } from "react"; const Counter = () => { const [count, setCount] = useState(0); return ( <>
<button onClick={() => setCount(count - 1)} disabled={count <= 0} >Decrementar</button>

El contador está en {count}

<button onClick={() => setCount(count + 1)}>Incrementar</button>
); } export { Counter } ```import { useState } from "react"; const Counter = () => { const \[count, setCount] = useState(0); return ( <> \
\<button onClick={() => setCount(count - 1)} disabled={count <= 0} >Decrementar\</button> \

El contador está en {count}\

\<button onClick={() => setCount(count + 1)}>Incrementar\</button> \
\ );} export { Counter }
Aprecio mucho que la clase vaya directo al grano, mostrando lo que es importante. Algo positivo es que da lugar a que uno investigue por su cuenta y también que otros estudiantes puedan subir tutoriales sencillos
Cual es las ventajas de usar React con Vite y no con next.js como aparece en la documentación oficial ?
Enamorandome...
useState podría usarse para switch (on/off), una alarma, temporizador; para un sistema de inventario (quizás?); para un botón visible/no visible, saldo en tu cuenta, contraseña.
Like quien haya detectado el: TRACA!!☺️
Hola chicos, en el QUIZ anterior creo que hay un pequeño bugcito. A veces la pregunta de reutilizar un componente sale erronea. pero luego sale OK al repetir el Quiz. Esto por si les pasa. ![](https://static.platzi.com/media/user_upload/image-a78764ef-b86e-4263-9660-04c226035a16.jpg)
El estado en React es un objeto que permite almacenar y manejar información dentro de un componente. Es esencial para mantener datos que pueden cambiar con la interacción del usuario o con el tiempo. En la clase, se mencionó que el estado puede ser local (dentro de un componente) o global (compartido entre varios componentes). Utilizamos el hook `useState` para definir y actualizar este estado. Por ejemplo, en un contador, el estado podría ser el número actual, que se incrementa o decrementa según la acción del usuario.
Me encanta, que claridad! Gracias!
Dejo por aquí un código que cuando el contador llega a cero se desactiva el botón decrementar, esto con el objetivo de evitar errores generando números negativos: `import { useState } from 'react'` `export const Counter = () => {  const [contador, setContador] = useState(0)  const [disable, setDisable] = useState(false)` `  const handleIncrementar = () => {    if (contador === 0) {      setDisable(false)    }    setContador(contador + 1)  }` `  const handleDecrementar = () => {    if (contador === 1 || contador === 1) {      setDisable(true)      setContador(contador - 1)      return    }    setContador(contador - 1)  }` `  return (   
     

Contador

` `     

{contador}

     
        <button onClick={handleIncrementar}>Incrementar</button>        <button onClick={handleDecrementar} disabled={disable}>          Decrementar        </button>     
   
  )}`
siento que ahora si el curso esta bien para los que empezamos este camino
***<u>Opino que para estas clases básicas está bien comenzar con conceptos fundamentales y ejemplos sencillos, ya que ayuda a construir una base sólida en React. Sin embargo, sería ideal que en cursos avanzados se enfoquen en proyectos más complejos y aplicaciones de gran escala, donde se pueda aplicar todo lo aprendido de manera práctica y realista.</u>***
```js import { useState } from "react"; const Counter = () => { const [count, setCount] = useState(0); return (

Decimal Counter

The count is: {count}

<button onClick={() => setCount(count + 10)}>Incrament</button> <button onClick={() => setCount(count - 10)}>Discrament</button> <button onClick={() => setCount(0)}>Reset</button>
); }; export default Counter; ```import { useState } from "react"; const Counter = () => { const \[count, setCount] = useState(0); return ( \
\

Decimal Counter\

\

The count is: {count}\

\<button onClick={() => setCount(count + 10)}>Incrament\</button> \<button onClick={() => setCount(count - 10)}>Discrament\</button> \<button onClick={() => setCount(0)}>Reset\</button> \
); }; export default Counter;
Decimal Counter `import { useState } from "react";` `const Counter = () => {` ` const [count, setCount] = useState(0);` ` return (` `
` `

Decimal Counter

` `

The count is: {count}

` ` <button onClick={() => setCount(count + 10)}>Incrament</button>` ` <button onClick={() => setCount(count - 10)}>Discrament</button>` ` <button onClick={() => setCount(0)}>Reset</button>` `
` ` );` `};` `export default Counter;`
Mi aporte: Hice este pequeño ejercicio simulando una compra para incrementar la cantidad de productos que se desea comprar y el numero que se decrementa en el stock ademas del incremento y decremento en el carrito de compras. ```js import { useState } from "react"; const stock = 100 const CarShopping = () => { const [count, setCount] = useState(0) const [shoppingCart, setShoppingCart] = useState(0) const decrement = () => { setCount(prevCount => (prevCount > 0 ? prevCount - 1: prevCount)); } const deleteShopping = () => { setShoppingCart(prevShopping => (prevShopping > 0 ? prevShopping - 1: prevShopping)) } return (

Carrito de compras: {shoppingCart} <button onClick={deleteShopping}>Cancelar una compra</button>

Papitas de Limon

<button onClick={decrement}>-</button> Cantidad: {count} <button onClick={() => setCount(count + 1)}>+</button>
<button onClick={() => setShoppingCart(shoppingCart + 1)}>Comprar</button>

Stock: {stock-count}

) } export default CarShopping; ```