Ahora hablemos de debouncing. Así que en este ejemplo, mientras el usuario escribe, estamos enviando una solicitud en cada pulsación de tecla, y esto es lo que queremos evitar, porque básicamente está saturando nuestra API, y realmente puede ralentizar las cosas. Lo que queremos es esperar a que el usuario termine de escribir, y luego llamar a la API. Así que el usuario escribe, y luego, una vez que ha terminado durante 200 milisegundos, llamamos a la API. Esto es debouncing.
Y la forma en que lo implementamos es simplemente con un set timeout. Así que te mostraré el ejemplo en JS vanilla primero, donde esencialmente tenemos un ID de timeout, y comienza vacío, pero luego cada vez que el input cambia, limpiamos el ID de timeout actual. Y así, clear timeout está integrado en el navegador web, y también vamos a usar el ID de timeout para realmente establecer un timeout para el usuario. Así que básicamente, comenzamos limpiando este timeout, y luego está bien si realmente pasas undefined. No va a dar error. Pero luego establecemos un timeout. Así que decimos, está bien, en 200 milisegundos, entonces llamaremos a la API. Pero si el callback de entrada se llama de nuevo, vamos a limpiar el anterior. Así que básicamente, mientras el usuario escribe, establecemos un timeout, y luego inmediatamente lo limpiamos, porque escribieron otro carácter. Así que lo establecemos, lo limpiamos, lo establecemos, lo limpiamos, y luego finalmente, si no escriben, lo limpiamos. Así que estamos alquilando esta misma cosa, pero en combinación con nuestro use effect.
Así que para React, la forma en que podemos limpiarlo es devolviendo una función desde nuestro use effect. Y así, esto se conoce como nuestra función de limpieza, ¿verdad? Establecemos el timeout almacenado dentro de ese ID de timeout, pero si el término de búsqueda cambia alguna vez, necesitamos limpiar ese timeout, y así la función que devolvemos desde el use effect se va a invocar, limpiar el timeout, y básicamente, lo limpiará, lo limpiará, lo limpiará, hasta que el usuario termine de escribir, y luego haga esa solicitud para obtener resultados. Todos los demás frameworks, muy similares. Así que en Preact, podemos devolver un callback desde nuestro use signal effect. En Svelte, también podemos devolver un callback desde nuestro efecto de signo de dólar. La única cosa a tener en cuenta aquí, sin embargo, es que Svelte 5 no rastrea automáticamente el acceso a dependencias dentro de callbacks anidados.
Así que aquí es donde estamos accediendo a la búsqueda, pero porque eso está en un callback anidado, Svelte no lo rastrea automáticamente. Así que el truco aquí es simplemente deshacerse de eso y luego simplemente acceder a él, y básicamente, como un no-op, simplemente, oye, necesito búsqueda, y luego el compilador de Svelte sabrá que necesita volver a ejecutar esta función cada vez que la búsqueda cambie, y nuevamente, estamos devolviendo esa función de limpieza. Por supuesto, esto es un truco. Probablemente hay mejores maneras de hacerlo, pero sí, y luego en Solid, muy similar, pero tienen esta función on cleanup que simplemente importas de la biblioteca de Solid. Así que no hay necesidad de devolver un callback, y lo bueno de eso es que realmente puedes llamarlo en cualquier lugar. Así que si tu función de limpieza por alguna razón necesita estar anidada en un callback o algo así, puedes hacerlo con ese on cleanup. Dentro de Angular, esto es un poco de nuevo, me disculpo, pero esto es como el ejemplo vanilla combinado con nuestra suscripción.
Comments