es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Sí, puedes usar la función de seguimiento de progreso incorporada de la API Fetch para obtener el progreso de una solicitud. La API Fetch proporciona un objeto especial llamado Headers que puedes pasar al método fetch para agregar opciones como el método, las cabeceras, etc. Una de estas opciones es signal, que se utiliza para crear una instancia de la clase AbortController.

    Para hacer un seguimiento del progreso de una solicitud fetch, puedes escuchar el evento progress en el objeto XMLHttpRequest que la API Fetch utiliza internamente. Específicamente, puedes escuchar los eventos loadstart, progress y load para recibir actualizaciones sobre el porcentaje de la solicitud que se ha cargado.

    Aquí tienes un ejemplo de cómo puedes usar esta técnica para mostrar una barra de progreso en tu aplicación React:

    import { useState } from 'react';
    
    function App() {
      const [progress, setProgress] = useState(0);
    
      const handleProgress = (event) => {
        if (event.lengthComputable) {
          const percentComplete = (event.loaded / event.total) * 100;
          setProgress(percentComplete);
        }
      };
    
      const handleClick = () => {
        const controller = new AbortController();
        const signal = controller.signal;
    
        fetch('/api/data', { signal })
          .then((response) => response.json())
          .then((data) => console.log(data))
          .catch((error) => console.error(error));
    
        signal.addEventListener('abort', () => console.log('Solicitud abortada'));
        signal.addEventListener('loadstart', () => console.log('Solicitud iniciada'));
        signal.addEventListener('progress', handleProgress);
        signal.addEventListener('load', () => console.log('Solicitud completada'));
      };
    
      return (
        <div>
          <button onclick="{handleClick}">Obtener datos</button>
          {progress !== 0 && <progress value="{progress}" max="100"></progress>}
        </div>
      );
    }
    
    export default App;
    

    En este ejemplo, la función handleClick envía una solicitud fetch al servidor y configura los oyentes de eventos necesarios para hacer un seguimiento del progreso. La función handleProgress actualiza el estado de progress en función del porcentaje de carga de la solicitud. La función render muestra una barra de progreso si el progreso no es 0.

Comments are closed.