#777 Puedes pasar log del error de la consola?
#781 me lo pasa como undefined.
No estoy en casa pero si no recuerdo mal era básicamente que no se puede hacer then de undefined
Lo que no se es por qué ni de dónde viene el fallo, ya que en teoría, al ser promesa, debería resolverla y luego actualizar el context sin problema.
La cosa es que metiéndolo a pelo funciona, metiéndole un async/await también, pero con un then no y me está dejando medio loco, ya que la idea es pulir conceptos y ver que si y que no se puede hacer y por qué.
#783 no estoy en casa pero así de cabeza es la llamada de axios
const getAll = async () => {
axios.get(URL)
.then((response) => {
const { data } = response
return data
}
Debería ser esto
#784 si el código lo tienes así tal cual, te falla porque te falta un return, no estás devolviendo nada en getAll
return axios.get....
#785 Esa es obvia, pero como dice que no es el codigo real, sino que lo ha escrito al aire ahora mismo...
#785 #786 cuando llegue a casa lo miro que la cita del médico se está retrasando más de la cuenta, pero no creo que sea tan fácil/subnormal de ser eso....no? Por mucho que fueran las 3 de la mañana digo XD
Luego pego screen
Edit:
Al crear el contexto e iniciarlizar el estado, no deberia venir de ahi el problema ya que ok, me lo mostraria vacio y pista. El problema se que viene de la llamada a getAll, pero no se por que =/ Alguna idea?
#785 #786 #781 Os dejo arriba el edit, que le puse pero no avise a ver si se os ocurre porque a mi no se me ocurre ni de donde viene el problema ni que buscar ya que no tiene sentido que de ese fallo.
Si, la api esta levantada y manda datos. Si meto un simple console.log en getAll me lo muestra con los datos que debe, pero no me los devuelve que es lo que me tiene aqui dandole vueltas como un gilipollas y seguramente sea lo mas tonto del mundo
#789 Metiendole el callback si que funciona. Alguna idea de por que fallaba lo otro? Porque en teoria, no debia de fallar tal y como estaba no?
La verdad es que no tengo ni idea, asi a simple vista deberia funcionar. Y no entiendo porque useCallback deberia ser solucion de esto.
En cualquier caso, porfavor, olvidate de todo esto (context etc...) y empieza a usar react-query o swr, yo soy mas de swr pero ya cada uno.
#791 lo meti como una funcion extra, luego cai en que asi tal cual ya me funcionaba pero bueno. Si #792 dice que deberia funcionar sera que el portatil esta a sus cosas y listo...
Mirare swr a ver que encuentro.
Otra duda....para apps de uso general, oauth? jwt? ambos? Nunca he usado oauth, aunque si que lo he visto un poco por encima. Supongo que todo sera en funcion del target de la app no? Ya sea publico o privado. O es indistinto y se puede usar oauth para ambos?
dice que deberia funcionar sera que el portatil esta a sus cosas y listo...
No no, a ver esto no funciona asi, mete un console log degugguer de getAll() y dinos.
#795 cuando llegue a casa miro, pero fue de lo primero que hice, meterle uno en getAll y otro en el then del useeffect.
El del getAll devolvía los valores bien, el del useeffect era undefined. Por eso tantas vueltas de que se dónde está o parece estar pero no encuentro el fallo porque no tiene sentido.
Si lo uso directamente metiendo la llamada en el useeffect. Si lo llamo desde una función que declare dentro del useeffect vale, pero si llamo a getAll y le hago un simple then para resolver la promesa, no vale. Y al menos hasta donde yo se, no tiene ningún puto sentido.
#797 ya ya, el problema es que no encuentro cómo, el código que puse es copiado directamente del archivo.
Lo único que se me ocurre es la API como tal, pero no tiene sentido porque en la llamada a getAll me devuelve bien los datos y el problema está al llamarlo en el useeffect. Le volveré a dar una vuelta luego.
Que a ver, funcionar lo tengo ya funcionando, pero teniendo que meter una función extra en vez de un simple getAll ().then
A lo otro que pregunte del tema autenticación, oauth? Montarlo yo con jwt? O da igual y va más en función de gustos/alcance de la app, ya sea público o privado?
#798 A ver, el problema es claro, el getAll() usado tal como lo describes en el useEffect no esta devoliendo una promesa, entonces si haces un
useEffect(() => {
console.log(getAll())
}
Mira a ver que te esta devolviendo este getAll, que no sera una promesa, de ahi el undefined del then.
Ni se te ocurra decir "bueno como así funciona, así se queda"
No por nada, sino porque ya tengo curiosidad de que está pasando ahí jajaja, con el código que has posteado no veo que puede ser
#800 No no, si al final le dare vueltas hasta que vea el por que, pero es algo que puedo dejar un poco de lado que ya he perdido 2 dias intentando ver de donde viene el problema, aunque como digo, esta arreglado de otra forma.
#799 Como puse por ahi arriba, si hago un
useEffect(() => {
console.log(getAll())
}
Lo que me devuelve es undefined. Pero si hago la llamada a axios dentro del useeffect si que me funciona.
useEffect(() => {
console.log(getAll())
axios.get(URL)
.then((response) => {
const { data } = response
return data
})
.then((regalos) => {
setList(regalos)
})
}, [])
En el archivo de llamadas lo unico que tengo es esto
import axios from 'axios'
export const getAll = () => {
return axios.get(URL)
.then((response) => {
const { data } = response
return data
})
}
O estoy cegato, o no hay error ahi
#802 Si, la opcion que me daba era meter una llamada desde una funcion que declarase en el useeffect,
useEffect(() => {
const fetchData = async () => {
const data = await getAll()
setList(data)
}
fetchData()
}, [])
Esto basicamente. La cosa es que eso ya lo probe y funciona, pero coño, si eso funciona que es llamandolo dentro del useeffect, tendria que valer sin tanta parafernalia y ponerle un simple getAll().then no?
Prueba a hacer esto:
export const getAll = () => {
const data = axios.get(URL)
.then((response) => {
const { data } = response
return data
})
return data;
}
#804 mamon, es lo mismo jajaja
No se hay algo aqui que no me cuadra, haz open source el repo y pasa link
Al final he tirado el proyecto, lo he hecho de nuevo, todo limpio, he hecho un simple c&p y ahora si funciona. Algo raro tendria que haber por ahi instalado o algo no se.
En el useeffect sólo tendrias que llamar una función async declarada fuera del useEffect que haga esa llamada y el posterior setState
#805 Razon tienes, cosa de estar respondiendo en el coche de vuelta de un viaje XDDD Lo que pasa es que con async/await si que te da problemas si intentas hacer return await getAll(), y pensé que sería similar, sorry
Has probado a hacer console.log(getAll)
para ver si realmente estas importando bien?
#808 Si, ya esta arreglado. Nuevo proyecto, copy&paste y ahora si funciona bien. Igual alguna dependencia que instalase para probar algo me estaba dando por el culo.
De todas formas le echare un ojo a swr a ver que tal va.
Lo de decir a la gente que se olvide de usar X y pase a usar librerias es un poco cuestionable cuanto menos, no? Especialmente si estan aprendiendo.
Luego acaba el sector lleno de gente que le pides algo que se desvíe un poquito de lo estándar y se hacen caca encima porque no saben lo que es una promesa o que significa closure.