[React] Hilo General - Una librería para atraerlos y atarlos a todos

TheBrotha

#777 Puedes pasar log del error de la consola?

2 respuestas
LR

#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é.

1 respuesta
isvidal

#782 Que es getAll() ? De donde sale? Pasa foto del codigo donde defines el getAll

1 respuesta
LR

#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

1 respuesta
QuitCat

#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....

3 respuestas
isvidal

#785 Esa es obvia, pero como dice que no es el codigo real, sino que lo ha escrito al aire ahora mismo...

2 respuestas
LR

#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:

Context.js
../services/regalos
Error

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?

LR

#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

1 respuesta
TheBrotha

#788 prueba a hacer la funcion usando los React.callback, debería funcionar con eso

1 respuesta
LR

#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?

1 respuesta
TheBrotha

#790 Como has hecho el callback? Por afinar mi respuesta

1 respuesta
isvidal

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.

1 respuesta
LR

#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?

2 respuestas
TheBrotha

#793 Sí, @isVidal tiene razón; mi approach hacia esto no tenía sentido jaja

isvidal

#793

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.

1 respuesta
LR

#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.

1 respuesta
isvidal

#796 Tenerlo lo tiene, algo estas haciendo mal.

1 1 respuesta
LR

#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?

1 respuesta
isvidal

#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.

1 1 respuesta
QuitCat

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

1 respuesta
LR

#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

1 respuesta
SupermaN_CK

#801 Has probado por curiosidad qué te dice ChatGPT?

1 respuesta
LR

#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?

TheBrotha

Prueba a hacer esto:

export const getAll = () => {
   const data = axios.get(URL)
    .then((response) => {
      const { data } = response
      return data
    })
  return data;
}
2 respuestas
isvidal

#804 mamon, es lo mismo jajaja

No se hay algo aqui que no me cuadra, haz open source el repo y pasa link

1 respuesta
LR

#804

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.

Lolth

En el useeffect sólo tendrias que llamar una función async declarada fuera del useEffect que haga esa llamada y el posterior setState

TheBrotha

#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?

1 respuesta
LR

#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.

Zoko

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.

4