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. 14-hook-useeffect

Intro useEffect

Se ha visto cómo agregar métodos de ciclo de vida a los componentes de clase que permiten "hacer que las cosas sucedan" en momentos específicos, por ejemplo, después de que un componente se monte o después de que se vuelva a representar.

El nombre genérico para estas acciones es "efectos secundarios", un término que proviene de la programación funcional. En un mundo ideal, podría implementarse interfaz de usuario como una función pura de props y state: dado un conjunto específico de state, que la aplicación debería verse así. Esa es la idea central detrás de React, y funciona bien la mayor parte del tiempo.

Sin embargo, a veces, debe hacerse algo que no encaja dentro de ese cuadro. Podría estarse iniciando una solicitud para obtener datos o enfocandose un control de entrada cuando se carga la página. Básicamente, cualquier cosa que no se ajuste al paradigma de las actualizaciones con state puede ser manejada por un efecto secundario.

Con el hook useEffect, puede responderse a los eventos del ciclo de vida directamente dentro de los componentes de función. A saber, tres de ellos: componentDidMount, componentDidUpdate y componentWillUnmount. Todo con una sola función.

Cada cambio en las props o el state hará que un componente se vuelva a representar. En cada render, useEffect tendrá la oportunidad de ejecutarse. De forma predeterminada, sus efectos se ejecutarán en cada renderizado, pero se verá cómo limitar la frecuencia con la que se ejecutan.

Pensar en useEffect como "sí-esto-entonces-eso" para los componentes React.

Crear un proyecto para poder jugar con useEffect. Dejar vacío src y abrir un nuevo archivo index.js.

$ npx create-react-app useeffect-hook
$ cd useeffect-hook
$ rm src/*
$ touch src/index.js

Luego escribir este ejemplo:

import React, { useState, useEffect } from 'react';
import ReactDOM from 'react-dom';

const LogEffect=() => {
    const [text, setText]=useState('');

    useEffect(() => {
        console.log('último valor:', text);
    });

    return (
        <input
            value={text}
            onChange={e => setText(e.target.value)}
        />
    );
};

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

Iniciar el ejemplo con npm start y abrir la consola. Se verá que la aplicación registró el "último valor", aunque no se haya escrito nada en el cuadro de texto. Esto se debe a que useEffect se ejecuta después del renderizado inicial. Siempre se ejecuta después del renderizado inicial, y no hay forma de desactivarlo. (Esto es similar a componentDidMount)

Ahora intentar escribir en el cuadro de texto y se verá que registra un mensaje para cada carácter que se escriba. Esto se debe a que el efecto se ejecuta después de cada render.

AnteriorObtener datos (Fetch) con useEffectSiguienteRe-obtener datos (Re-Fetch) cuando cambian

Última actualización hace 5 años

¿Te fue útil?

captura