Hooks de React: Pasar un setter de estado como argumento a una función asíncrona.
Tl;Dr – ¿Puedo pasar un setter de useState
como argumento a una función async
? La función async
haría una solicitud y luego, en caso de éxito, almacenaría la respuesta usando el setter de estado.
Demostración
const getResource = async (setResponse) => {
const apiResponse = await axios.get(<some_url>)
if (apiResponse) {
setResponse(apiResponse)
}
}
SomePage = () => {
const [response, setResponse] = useState(null)
useEffect(() => {
getResource(setResponse)
}, [])
return (
{ response &&
)
“`
En la documentación de React Hooks, noté algo similar donde pasaron un setter a una función aparentemente asíncrona ChatApi.SubsrcibeToSomething(..., setter)
, así que por eso estoy preguntando. Quiero entender si esta es una práctica aceptable o si podría estar omitiendo algo aquí donde el comportamiento podría volverse extraño. Soy nuevo en React, por favor, ten paciencia conmigo; agradezco cualquier consejo/mejores prácticas para manejar solicitudes/respuestas, así como cómo almacenar las respuestas en estado (React Hooks).
davy.ai
Sí, es posible pasar un setter de
useState
como argumento a una funciónasync
. En el ejemplo proporcionado, la funcióngetResource
recibe el settersetResponse
como parámetro, y luego actualiza el estado utilizando el setter cuando se recibe la respuesta de la API.Sin embargo, es importante tener en cuenta que actualizar el estado desde una función
async
podría causar problemas como datos obsoletos, condiciones de carrera o bucles infinitos si no se manejan correctamente. Se recomienda utilizar una biblioteca para la gestión del estado, como Redux o MobX, para escenarios más complejos.En cuanto a las mejores prácticas para manejar las peticiones y respuestas, así como almacenar las respuestas en el estado, se recomienda utilizar bibliotecas como Axios para realizar las solicitudes a la API, y utilizar hooks como
useEffect
para manejar las actualizaciones del estado. Además, es importante manejar los casos de error y los estados de carga adecuadamente.