⚛️ Como consumir una api con React Hooks PASO A PASO con BUENAS PRÁCTICAS

แชร์
ฝัง
  • เผยแพร่เมื่อ 20 ธ.ค. 2024

ความคิดเห็น • 91

  • @Developero
    @Developero  4 ปีที่แล้ว

    🚀 Cupones de descuento para cursos en Udemy: developero.io/courses-premium
    👨‍💻Curso TDD con React JS - Jest y React testing library: www.udemy.com/course/tdd-react-js/?referralCode=F40803D2C4D2934AB038
    👨‍💻Curso Guía definitiva: Aprende los 9 Patrones Avanzados en ReactJS: www.udemy.com/course/react-js-patrones/?referralCode=FF3F91AFC79C5837D13E
    📖 Patrones avanzados en React JS - Kindle ebook: amzn.to/3hsZCWC
    📖 React Hooks Manual Desde Cero - Kindle ebook: amzn.to/34ezc67
    📖 Introducción al Testing en Javascript - Kindle Ebook: amzn.to/39FGHWy

  • @landerosJ5
    @landerosJ5 4 ปีที่แล้ว +1

    Excelente video. Me ayudo mucho, resolviste varios temas de manera rápida y bien explicada GRACIAS!!!

    • @Developero
      @Developero  4 ปีที่แล้ว +1

      Me da gusto que te sirviera! :D

  • @_rvgz
    @_rvgz 5 ปีที่แล้ว +5

    Muy buenos videos! Es genial ver buenas practicas aplicadas, creo que es de las cosas que mas se buscan en videos tutoriales, gracias por compartir tu conocimiento!

    • @Developero
      @Developero  5 ปีที่แล้ว

      Gracias por tu comentario Roberto!

  • @mauroandressosa1342
    @mauroandressosa1342 3 ปีที่แล้ว

    Muy bueno ! Estaba un poco enredado con este tema, ahora me quedo mucho mas claro. Gracias !

  • @ValdezSoftware
    @ValdezSoftware 3 ปีที่แล้ว

    Justo lo que buscaba ya que soy nuevo en esto de react… de mi parte tienes un nuevo suscriptor, muchas gracias

    • @Developero
      @Developero  3 ปีที่แล้ว

      Me da gusto que te siviera

  • @martiyo5115
    @martiyo5115 5 ปีที่แล้ว +5

    Sigo esperano el proximo capitulo. Continua por favor, tus viedeos me son muy utiles!!

    • @Developero
      @Developero  5 ปีที่แล้ว

      Claro que sí! Ya este mes de octubre quedarán todos los videos :D

    • @Developero
      @Developero  5 ปีที่แล้ว +3

      Ya pronto subiré más vídeos

    • @emiesteban
      @emiesteban 4 ปีที่แล้ว

      ​@@Developero no encuentro el siguiente video

    • @Developero
      @Developero  4 ปีที่แล้ว

      Apenas voy viendo tu comentario Emiliano :v
      Aquí está toda la lista th-cam.com/play/PLkr7dGY4D2sOFts538pghxWaabulH2kMU.html

  • @adrianfgutierrez2836
    @adrianfgutierrez2836 4 ปีที่แล้ว

    Buen trabajo. Me gusta que te tomes el tiempo para explicar que haces en cada paso. Muchas gracias 👍🏾

    • @Developero
      @Developero  4 ปีที่แล้ว +1

      Me da gusto que te sea de utilidad!

  • @leonelg.r.3964
    @leonelg.r.3964 5 ปีที่แล้ว +1

    Esperamos pronto vuelvas, tus vídeos son de mucha ayuda gracias

  • @jorgeluisretamalcontreras5030
    @jorgeluisretamalcontreras5030 3 ปีที่แล้ว

    Amigo no sabes cuanto me ayudaste!!, me suscribo

  • @oswaldosilva7750
    @oswaldosilva7750 4 ปีที่แล้ว

    Excelente explicación de este tutorial. Gracias por compartir. Saludos desde Venezuela.

    • @Developero
      @Developero  4 ปีที่แล้ว

      Gracias, saludos!

  • @edgarbalan4355
    @edgarbalan4355 5 ปีที่แล้ว +1

    Excelente tus videos y cuando subis los demas para terminar este MERN esta buenisimo!!!!!!!!!!!!!!!!

    • @Developero
      @Developero  5 ปีที่แล้ว +1

      Yeahhh!
      Si, he estado en unos proyectos que me consumen el tiempo pero prometo terminar esta lista de reproducción y crear incluso más!

    • @edgarbalan4355
      @edgarbalan4355 5 ปีที่แล้ว +2

      hahahahaha que buenisimo espero pronto para terminar este MERN Dios te bendiga

  • @jessi9522
    @jessi9522 2 ปีที่แล้ว

    Muy buen video, muchas gracias. Saludos desde Brasil

  • @oduber.vasquez
    @oduber.vasquez 4 ปีที่แล้ว

    Excelente tutorial! esperamos más vídeos, saludos y muchas gracias

  • @rodss3504
    @rodss3504 3 ปีที่แล้ว

    Wow, gracias bro, excelente video, me encanta que utilizas los hooks

  • @tombasten6525
    @tombasten6525 5 ปีที่แล้ว +1

    Muy buenos los videos! espero que sigas subiendo los próximos. Me fueron de mucha utilidad.

    • @Developero
      @Developero  5 ปีที่แล้ว +2

      Gracias! sí, seguiré subiendo pronto :D

  • @rlscode
    @rlscode 5 ปีที่แล้ว

    Hola me gustó el video y explicación muy clara!

    • @Developero
      @Developero  5 ปีที่แล้ว

      Hola Ramsés! Me da gusto verte por acá y que este vídeo te haya servido :D
      Cualquier duda comenta y aquí lo vemos ;D

  • @victorgiovannibeltranrodri1047
    @victorgiovannibeltranrodri1047 5 ปีที่แล้ว +1

    Me gusto tu video, una pregunta porque muchos usan axios y no usar directo un fech?

    • @Developero
      @Developero  5 ปีที่แล้ว

      Es por la facilidad que tiene, aunque realmente axios es un wrapper de fetch

  • @theframeworksupport7393
    @theframeworksupport7393 4 ปีที่แล้ว +1

    Hola, como puedo crear una función global a nivel de proyecto sin tener que hacer un import?. Por ejemplo en python se hace agregando la funcion al espacio __builtin__.mi_funcion y ya no necistas importar ningun módulo

    • @Developero
      @Developero  4 ปีที่แล้ว +1

      Hola!
      En el mundo JS es mala práctica usar variables globales debido a que puedes incurrir en bugs extremadamente difíciles de resolver. Ejemplo, declarar una variable global con el mismo nombre de una variable local.
      Dicho lo anterior, puedes aprovechar la variable global `window` y agregarle propiedades como window.myFunction.
      Personalmente, no recomiendo su uso y es preferible analizar la arquitectura de la app para ver si hay algo que podemos mejorar.
      Si estás en React, hay patrones que te ayudan para re usar lógica a través de componentes. Están los HOC y los hooks.
      Sé que cuesta más trabajo hacer otra solución porque es un proceso de abstracción, y eso cuesta energía mental. PERO es así como mejoramos como desarrolladores profesionales.
      Saludos!

    • @theframeworksupport7393
      @theframeworksupport7393 4 ปีที่แล้ว +1

      @@Developero entiendo el punto pero son variables y funciones de solo lectura. Tipo el alert() o el console.log() que las puedes instanciar en cualquier punto de tu proyecto sin tener que importar nada.

  • @ramiromoreno9581
    @ramiromoreno9581 4 ปีที่แล้ว +1

    Hola amigo lleve tu curso de php y msql y tome estos de react y ya no te vi mas ? estas bien ?

    • @Developero
      @Developero  4 ปีที่แล้ว

      Apenas voy leyendo tu comentario, sí, todo al 100! gracias :D ya he estado más activo, he andado en otros proyectos que me consumen el tiempo :B

  • @amusa26
    @amusa26 4 ปีที่แล้ว

    Excelentes los videos pero quedo con la sensasión de que nusca se mostraron en los videos. Cuándo podrías subirlo por favor?
    Y sigue haciendo más cursos, explicas muy bien. Gracias y saludos

    • @Developero
      @Developero  4 ปีที่แล้ว +1

      Hola! he tenido un poco abandonado el canal pero sigue siendo dentro de mis planes el continuar con este proyecto!
      Algunas de las buenas prácticas que hemos manejado aquí son:
      - Crear una capa de servicios para consumir api en lugar de consumirla directamente en un componente.
      - Configurar variables de entorno para hacer customizable a qué api vamos a consumir (útil al cambiar de entornos como a prod).
      - Manejar asincronía por medio de async await dentro del hook useEffect.
      Me da gusto que te haya servido! :D

  •  5 ปีที่แล้ว

    hola creo q tengo problemas con las dependencias de babel.. me tira este error despues de poner el async:
    Uncaught ReferenceError: regeneratorRuntime is not defined...
    vengo usando un mern boilerplate y creo que esta desactualizado...
    que puedo hacer con esto:
    "dependencies": {
    "@babel/core": "^7.0.0-beta.42",
    "@babel/polyfill": "^7.7.0",
    "@babel/preset-env": "^7.0.0-beta.42",
    "@babel/preset-react": "^7.0.0-beta.42",
    "@fortawesome/react-fontawesome": "^0.1.7",
    "autoprefixer": "^8.2.0",
    "axios": "^0.19.0",
    "babel-loader": "^8.0.0-beta.2",
    "babel-plugin-transform-class-properties": "^6.24.1",
    "bcrypt": "^3.0.7",
    "bcryptjs": "^2.4.3",
    "bootstrap": "^4.4.1",
    "classnames": "^2.2.6",
    "connect-history-api-fallback": "^1.5.0",
    "connect-mongo": "^3.2.0",
    "copy-webpack-plugin": "^4.5.1",
    "cors": "^2.8.5",
    "css-loader": "^3.2.0",
    "express": "^4.16.3",
    "express-session": "^1.17.0",
    "extract-text-webpack-plugin": "^4.0.0-beta.0",
    "flag-icon-css": "^3.4.5",
    "html-webpack-plugin": "^3.1.0",
    "http-proxy-middleware": "^0.20.0",
    "jquery": "^3.4.1",
    "jsonwebtoken": "^8.5.1",
    "mongoose": "^5.0.11",
    "node-sass": "^4.13.0",
    "nodemon": "^1.17.2",
    "passport": "^0.4.0",
    "passport-google-oauth": "^2.0.0",
    "passport-local": "^1.0.0",
    "popper.js": "^1.16.0",
    "postcss-loader": "^2.1.3",
    "react": "^16.2.0",
    "react-dom": "^16.2.0",
    "react-hot-loader": "^4.0.0",
    "react-inline-script": "^1.2.0",
    "react-router": "^4.2.0",
    "react-router-dom": "^4.2.2",
    "react-spring": "^8.0.27",
    "sass-loader": "^6.0.7",
    "style-loader": "^0.20.3",
    "webpack": "^4.2.0",
    "webpack-cli": "^3.1.2",
    "webpack-dev-middleware": "^3.0.1",
    "webpack-hot-middleware": "^2.21.2",
    "webpack-merge": "^4.1.2",
    "whatwg-fetch": "^2.0.3"

    • @Developero
      @Developero  5 ปีที่แล้ว

      Hola, creo que esto te puede servir: stackoverflow.com/questions/33527653/babel-6-regeneratorruntime-is-not-defined
      Si cual es el mern boilerplate que usas? hay uno de mern.io que ya no está en mantenimiento

  • @karlosperdiguerootxoa4157
    @karlosperdiguerootxoa4157 5 ปีที่แล้ว

    Developero, felicitaciones y muchas gracias por el excelente curso. Una cosa te quería preguntar...
    Entiendo que tras ejecutar la función 'setProducts' con el array como parámetro 'response.data.products'
    es decir, setProducts(response.data.products) la variable 'products' del useState debería actualizarse.
    Lo que me ocurre es que no se me queda actualizada y continúa con el valor de inicio
    ,es decir, como un array vacío. Si le quito al useEffect el segundo parámetro de array
    vacío [] para que se ejecute una sola vez, entonces sí lo actualiza con los datos del parámetro 'response.data.products', pero ejecutándose la función de modo continuo.
    En resumen, ¿ cuál es el motivo de que si digo que se ejecute una vez la función 'LoadProducts' a través de poner en el useEffect, el segundo parámetro con el array vacio [], el log me muestre el array vacío del useState products ?
    Nota: En la consola se me muestra el siguiente mensaje
    React Hook useEffect has a missing dependency: 'products'. Either include it or remove the dependency array react-hooks/exhaustive-deps
    Estoy a la espera de las siguientes entregas para completar el curso.
    Un abrazo y gracias por compartir tu conocimiento.

    • @Developero
      @Developero  5 ปีที่แล้ว

      Hola!
      En el vídeo anterior de esta lista de reproducción fue más a detalle sobre esos temas que preguntas.
      Lo que queremos es que este hook sea como el componentDidMount para que se ejecute sólo al cargarse, para lograr estocse pone el array vacío como segundo parámetro.
      Esto funciona porque el segundo parámetro de array, se colocan variables que al cambiarse, se ejecute el hook de nuevo.
      Y como no hay variable que cambie, no habrá un trigger que vuelva a ejecutar el hook.

    • @karlosperdiguerootxoa4157
      @karlosperdiguerootxoa4157 5 ปีที่แล้ว

      @@Developero creo que no me he explicado bien. El useEffect lo tengo igual que tú es de saneamiento es decir se ejecuta una vez. El problema es que no me actualiza correctamente la variable de estado 'products'.
      useEffect( () => {
      async function LoadProducts(){
      const response = await getProducts()
      if (response.status===200){
      console.log(response.status)
      setProducts(response.data.products)
      }
      console.log(response.data.products)
      console.log(products)
      }
      LoadProducts()
      },[])
      El console.log(products) me muestra un array vacio.
      Sin embargo el anterior trae todo el array completo.
      Se supone que el setProducts debería actualizar la variable de estado products y no lo hace. También me muestra con valor 200 el status.
      Como te decía me sale el siguiente mensaje en la consola
      React Hook useEffect has a missing dependency: 'products'. Either include it or remove the dependency array

    • @Developero
      @Developero  5 ปีที่แล้ว

      @@karlosperdiguerootxoa4157 Oh okok.
      Viendo el código más a detalle, veo el por qué pasa el warning.
      Tienes un console log de products
      console.log(products)
      Pero products es una variable (de estado) que está declarada fuera del hook useEffect.
      Cada vez que uses una variable declarada fuera del scope del useEffect, te marcará ese warning.
      Si lo quitas, seguro te deja de aparecer el warning.
      Y la segunda pregunta, me parece que dentro del useEffect, si actualizas una variable de estado, en ese mismo momento no se verá reflejado el cambio dentro del useEffect.
      Mejor inspecciona qué tiene
      response.data.products
      Y puedes revisar el valor de la variable de estado products en la consola de chrome, usando la extensión react devtools o haz que cambie la UI cuando products tenga un valor.
      Esto te ha resuelto?

    • @karlosperdiguerootxoa4157
      @karlosperdiguerootxoa4157 5 ปีที่แล้ว

      Muchas gracias eso aclara mi pregunta. Espero como agua de Mayo tu próxima entrega. Un abrazo.

    • @Developero
      @Developero  5 ปีที่แล้ว

      @@karlosperdiguerootxoa4157 Gracias y sí, pronto estarán los demás vídeos :D

  • @LikeDePollo
    @LikeDePollo 2 ปีที่แล้ว

    pasen link del video anterior donde usó useEffect

    • @Developero
      @Developero  2 ปีที่แล้ว

      Aquí encuentras todos los vídeos sobre esta app: th-cam.com/play/PLkr7dGY4D2sOFts538pghxWaabulH2kMU.html

  • @noeblackberry5209
    @noeblackberry5209 4 ปีที่แล้ว

    Buen video, ¿cómo se haría para consumir un API privado, donde debo enviar el token por las cabeceras, pero si lo hao con react queda vulnerable pues un suaurio experimentado puede sacar ese token, como hago para consumirlo de manera segura?, saludos gracias

    • @Developero
      @Developero  4 ปีที่แล้ว +1

      Hola!
      Para usar tokens o valores sensibles, se recomienda hacerlo con variables de entorno que tu server o donde alojes tu app soporte.
      Por ejemplo, en heroku y en zeit, puedes configurar variables de entorno que no son expuestos en el frontend.
      Quien ande de curioso inspeccionando tus archivos de tu app frontend en la consola del browser, si acaso verá algo como:
      proccess.env.MY_SECRET_VALUE,
      Y ese valor puede ser seteado configurando tu deploy, es decir, sin ponerlo en ninguna parte de tu código.
      En create-react-app, debes usar el prefijo "REACT_APP_" en el nombre de tu variable de entorno para que pueda ser inyectado. Usando el ejemplo anterior, sería: proccess.env.REACT_APP_MY_SECRET_VALUE.
      Tambien puedes asignar variables de entorno en la consola cuando inicializas tu app y eso ya varía de cada sistema operativo.
      Te dejo un link de la doc de create-react-app sobre ello create-react-app.dev/docs/adding-custom-environment-variables/

    • @noeblackberry5209
      @noeblackberry5209 4 ปีที่แล้ว +1

      @@Developero WOWWWWW y así en mayúsculas, nadie me ha dado una respuesta tan satisfactoria como la tuya, genial, me pondré a investigar y ver como hacer pruebas, gracias.

    • @Developero
      @Developero  4 ปีที่แล้ว +1

      Noe Blackberry yeah, si tienes mas dudas comentas 😉

    • @Developero
      @Developero  4 ปีที่แล้ว

      Por otra parte, si serán valores enviados a un backend, basta con inspeccionar los requests y sus headers.
      Por ejemplo, un JWT que uses en una api rest, va a ser imposible ocultarlo en tu frontend por lo que dije anteriormente.
      Debes asumir que el JWT será posible de ver e incluso de descodificar (está en base 64).
      Por eso mismo, tus JWT deben tener el minimo de informacion posible y que no sea sensible.
      Ejemplo, que tenga solamente un uuid (no ID ya que si es un ID como se maneja en DB relacionales, si usuario A tiene ID = 1, deduces que hay un usuario B con id = 2).
      Si usas UUID, verás algo como xxxx-xxxx-xxxxx.
      El JWT tambien podria tener solo el email, username y quiza roles.
      Espero que esto complemente la respuesta dada antes :B

  • @marcoantoniobarreragonzalz8657
    @marcoantoniobarreragonzalz8657 4 ปีที่แล้ว +1

    ami me dice regeneratorRuntime que hago

    • @Developero
      @Developero  4 ปีที่แล้ว

      Puedes colocar el mensaje completo? y el codigo que te genera ese mensaje.
      Parece que es algo de babel, pero con create-react-app no deberia haber ningun problema.

    • @marcoantoniobarreragonzalz8657
      @marcoantoniobarreragonzalz8657 4 ปีที่แล้ว

      @@Developero si creo que es de Babel sólo que nose como quitar el error

  • @Angel-yo1is
    @Angel-yo1is 3 ปีที่แล้ว

    Amigo tienes el código de lo que desarrollaste? Gracias.

    • @Developero
      @Developero  3 ปีที่แล้ว +1

      Sí github.com/Developero-oficial/intro-mern

    • @Angel-yo1is
      @Angel-yo1is 3 ปีที่แล้ว

      @@Developero Muchas gracias !

    • @Developero
      @Developero  3 ปีที่แล้ว

      @@Angel-yo1is ;D

  • @adrianfgutierrez2836
    @adrianfgutierrez2836 4 ปีที่แล้ว

    Cuando puedas, un video de Reactjs con jwt. Hay muchos en yt pero no lo explican bien

    • @Developero
      @Developero  4 ปีที่แล้ว

      Si! buena propuesta, gracias :)

  • @kevsus8090
    @kevsus8090 3 ปีที่แล้ว

    reponse.status not definde ¿Alguna solucion?

    • @Developero
      @Developero  3 ปีที่แล้ว

      Hazte la pregunta siempre de: qué pista me indica esto?
      En este caso, qué pista me indica si me da error de response.status not defined?

  • @randymveras1658
    @randymveras1658 5 ปีที่แล้ว

    Hola hermano se que este no es el. momento para intentar solicitar pero creo que sería bueno un mini curso de tienda online en php 7+ tipo mvc en el 2020

    • @Developero
      @Developero  4 ปีที่แล้ว

      Has usado Laravel?

  • @karenpreciado99
    @karenpreciado99 2 ปีที่แล้ว

    es muy mejorable la manera de explicar...trata de contaxtualizar mas tus explicaciones.

    • @Developero
      @Developero  2 ปีที่แล้ว

      Gracias por tu feedback, lo tomo en cuenta para futuros vídeos

  • @martiyo5115
    @martiyo5115 5 ปีที่แล้ว

    Buenisimo! Gracias

    • @Developero
      @Developero  5 ปีที่แล้ว

      Me da gusto de que te sirviera!

  • @emersonsmithperu
    @emersonsmithperu 5 ปีที่แล้ว +1

    Cómo hacer un crud de videos, imágenes, PDF...

    • @Developero
      @Developero  5 ปีที่แล้ว +1

      Desde el frontend con React, puedes usar la misma estrategia que muestro en este vídeo, sólo agregas otras funciones para completar el CRUD.
      Dada la estructura de archivos que usamos, tenemos Products y dentro todo lo relacionado a productos, si videos, imagens, etc, son muy diferentes, puedes crear una carpeta por cada uno de ellos
      src/
      ....Img
      ....Pdf
      ....Video
      ....Other
      Si no, puedes hacer un
      src/
      ....Files/
      ........Img
      ........Pdf
      ........Video
      ........Other
      Lo importante es tener un archivo donde esté la lógica de consumo de la api.
      Img/
      ....Services/
      ......../index.js

    • @emersonsmithperu
      @emersonsmithperu 5 ปีที่แล้ว

      @@Developero estoy tratando de hacer pero no me funciona :( amigo qué puedo leer, referencias.
      Y si haces este tutorial, tendrás Miles más de seguidores, nuestro héroe code :) Lo que quiero es hacer un servidor Node y Mongo de videos, dónde el cliente pide mediante una URL y se pinte. Tipo TH-cam. Más que todo saber más de Transferencia de cualquier archivo desde el cliente al servidor. :) Gracias

    • @Developero
      @Developero  5 ปีที่แล้ว +1

      @@emersonsmithperu ok, de momento te paso estas fuentes que encontré y que creo te pueden servir:
      www.quora.com/How-do-I-create-real-time-video-streaming-in-Node-js
      www.npmjs.com/package/node-media-server
      Este tiene el how to do: medium.com/better-programming/video-stream-with-node-js-and-html5-320b3191a6b6
      Espero te sirvan!

  • @omega120878
    @omega120878 4 ปีที่แล้ว

    que paso con el siguiente capitulo?

    • @Developero
      @Developero  4 ปีที่แล้ว

      Ya pronto va a salir!

  • @jhonatanoropezamendoza6356
    @jhonatanoropezamendoza6356 5 ปีที่แล้ว

    Te amo

  • @DerlisRuizDiazR
    @DerlisRuizDiazR 4 ปีที่แล้ว

    Genial !

  • @doyomay
    @doyomay 5 ปีที่แล้ว

    Excelente

    • @Developero
      @Developero  5 ปีที่แล้ว

      Gracias! Fan destacado :B

  • @youtekdev8131
    @youtekdev8131 5 ปีที่แล้ว

    E X C E L E N T E ! ! !

  • @emersonsmithperu
    @emersonsmithperu 4 ปีที่แล้ว +1

    estaba siguiendo el tutorial :( pero este fue tu ultimo video :(

    • @Developero
      @Developero  4 ปีที่แล้ว +2

      Ya pronto lo terminaré, lo prometo :(

    • @emersonsmithperu
      @emersonsmithperu 4 ปีที่แล้ว

      @@Developero por favor de veras, harías un gran favor a este estudiante recién entrando a la programación :) gracias profe :) se podrá saber qué mes? O lo tienes en git hub? Saludos desde Perú :)

  • @Pedro-wk7vq
    @Pedro-wk7vq 4 ปีที่แล้ว +2

    hemos sido engañados