Saltar al contenido

ReactJS: cómo llamar a useEffect hook solo una vez para obtener datos de API

Solución:

Si lo entiendo correctamente, desea imitar el comportamiento “en el componente montado” de los componentes de reacción basados ​​en clases regulares a través de useEffect(), de modo que la devolución de llamada del efecto solo se active una vez en el primer renderizado.

Para lograr ese comportamiento, puede pasar una matriz vacía al segundo argumento de useEffect() al igual que:

useEffect(() => {
  loadMessages();
}, []); /* <-- add this */

El segundo argumento de matriz le permite especificar qué prop variables desencadenan el useEffect() devolución de llamada (si corresponde) cuando cambian sus valores.

Al pasar una matriz vacía, esto significa que useEffect() no se activará por ningún cambio en la entrada prop variables y, a su vez, solo se llamará una vez, durante el primer renderizado.

Para obtener más información sobre este segundo argumento, consulte esta documentación y esta documentación

useEffect() es un gancho de reacción para componentes funcionales que cubre la funcionalidad de los ganchos del ciclo de vida de los componentes de la clase. useEffect() combina componentDidMount(), componentDidUpdate() y componentWillUnmount() de los componentes de la clase, lo que significa que se ejecutará cuando se monte el componente, cuando cambie el estado del componente y cuando se desmonte el componente del DOM.

Verifique el siguiente ejemplo,

useEffect(() => {
   setTimeout(() => {
      alert("data saved");
    }, 1000);
});

El código / alerta anterior se ejecuta cuando el componente está montado / renderizado inicial, cuando el estado del componente cambia y cuando el componente se desmonta del DOM.

Para hacer que el código anterior se ejecute con menos frecuencia, podemos pasar una matriz de valores como segundo argumento, como las dependencias para ese efecto. Si una de las dependencias cambia, el efecto se ejecutará nuevamente.

Considere que tenemos una matriz de personas pasada a los accesorios del componente funcional y queremos que la alerta se ejecute solo cuando la matriz de personas cambie.

useEffect(() => {
    setTimeout(() => {
      alert("data saved");
    }, 1000);
  }, [props.persons]);

Esto ejecutará el código durante el procesamiento inicial y cuando props.persons cambios.

Entonces, para ejecutar el código solo durante el procesamiento inicial / montaje del componente, puede pasar una matriz vacía, lo que significa que no se especifican dependencias cuando se debe ejecutar el efecto. Por lo tanto, se ejecuta durante el renderizado inicial y cuando se desmonta el componente.

useEffect(() => {
    setTimeout(() => {
      alert("data saved");
    }, 1000);
  }, []);

Puede modificar su useEffect() gancho como se muestra a continuación para llamarlo solo una vez para obtener datos de API,

useEffect(() => {
    loadMessages();
  }, []);
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *