react-puro-19
  • React Puro - 19
  • code
    • README
    • README
    • README
    • README
    • README
    • README
    • README
    • README
  • 7-state-en-clases
    • Ejemplo inicial: un contador
    • Manejo de eventos
    • El state
    • Sintaxis limpia en Class Components
    • setState es Asincrónico
    • Fusión superficial vs profunda
  • 5-children
    • Personalizar Children antes de renderizar
    • PropTypes para Children
    • Los Children
    • Diferentes tipos de Children
    • Manejando uso Children
  • 13-hook-usereducer
    • Qué es un Reducer?
    • Un ejemplo más practico
    • Entonces, Redux murió?
  • 4-proptypes
    • Documentación y depuración incluida
    • PropTypes como documentación
    • Cómo validar, formas comunes
    • Ejemplo Tweet con PropTypes
  • 3-props
    • Comunicación con componentes Padre
    • Las Props:
    • Pasar Props
    • Recibir Props
    • Ejemplo Tweet con Props
  • 11-pensando-uso-state
    • "Tipos" de componentes
    • Qué colocar en el State
    • Dónde mantener el estado
    • Pensando declarativamente
  • 9-requests-api
    • Intro
    • Eligir libreria HTTP
    • Obtener datos y mostrarlos
  • 10-state-en-funciones
    • El useState Hook
    • Actualizar State basado en State anterior
    • State como un Array
    • Reglas de los Hooks
    • La "magia" de los Hooks
    • State como un Objeto
    • Intro Hooks
  • 15-api-context
    • Usando React API Context
    • Patrón "Slots"
    • Patrón "Render Props"
    • Intro API Context
    • Otros Patrones de Context
    • Ejemplo perforación de props
    • hook_usecontext
  • 8-ciclo-vida-componente
    • Fases
    • El ciclo
    • Manejo de errores
    • Desmontaje
    • Representación
    • Montaje
  • 14-hook-useeffect
    • Límite cuando se ejecuta un Effect
    • Hacer cambios visibles del DOM
    • Obtener datos (Fetch) con useEffect
    • Intro useEffect
    • Re-obtener datos (Re-Fetch) cuando cambian
    • Solo ejecución en montaje y desmontaje
  • 2-jsx
    • Ejemplo componente Tweet:
    • JSX:
    • Trabajando con JSX:
  • 12-controles-entrada
    • Entradas controladas
    • Entradas no controladas
  • 6-github-file-list
    • Parte 2: la Prop 'key'
    • Parte inicial
  • 1-hola_mundo
    • Hola mundo:
Con tecnología de GitBook
En esta página

¿Te fue útil?

  1. 10-state-en-funciones

Actualizar State basado en State anterior

Con otro ejemplo: actualizar el valor del estado en función del valor anterior.

Se creará un "seguidor de pasos". Facil de usar. Como un Fitbit. Cada vez que se de un paso, simplemente hacer clic en el botón. Al final del día, dirá cuántos pasos fueron.

import React, { useState } from 'react';

function StepTracker() {
    const [steps, setSteps] = useState(0);

    function increment() {
        setSteps(steps => steps + 1);
    }

    return(   
    <div>
        Hoy has realizado {steps} pasos
        <br />
        <button onClick={increment} > Di otro paso </button>
    </div>
    );
}

ReactDOM.render(
    <StepTracker /> ,
    document.querySelector('#root')
);

Esta vez se importo useState directamente de React, para no tener que escribir React.useState.

Primero, se esta creando un nuevo estado llamando a useState, inicializándolo a 0. Devuelve el valor actual de los pasos (0) y una función para actualizarlo (setSteps). Se tiene una función de incremento para aumentar el contador de pasos.

Notar que se esta usando la forma funcional o "actualizador" de setSteps aquí. Se podría llamar a setSteps(steps + 1) directamente y funcionaría igual, pero se quería mostrar la forma de actualización, porque será útil en caso de que la actualización esté ocurriendo en una funcion encerrada (closure) que se ha cerrado durante el valor antiguo (obsoleto) del estado. El uso de la forma de actualización garantiza que se esté operando con el último valor de estado.

Otra cosa que se ha hecho es extraer la función de incremento, en lugar de incluir la función de flecha en la prop onClick del botón. Se podría haber escrito el botón de esta manera y hubiera funcionado igual:

<button onClick={() => setSteps(steps => steps + 1)} >
Di otro paso
</button>
AnteriorEl useState HookSiguienteState como un Array

Última actualización hace 5 años

¿Te fue útil?