Тёмный

Cómo Consumir APIs en REACT como un PROFESIONAL 

Learn JavaScript with Carlos Azaustre
Подписаться 145 тыс.
Просмотров 97 тыс.
50% 1

Опубликовано:

 

1 окт 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 200   
@CarlosAzaustre
@CarlosAzaustre Год назад
📘Mi nuevo libro "Aprendiendo React" ¡Ya a la venta! amzn.to/3r83cjL
@alejandratoro2686
@alejandratoro2686 10 месяцев назад
Quien arrancando y a duras penas sabe qué es react?
@camilogarcia1325
@camilogarcia1325 2 дня назад
Si aún estás en el tema, te recomiendo los API Rest en Js de JonMircha
@CarlosAzaustre
@CarlosAzaustre Год назад
Tienes el código visto en el vídeo, en el siguiente repositorio de GitHub ► github.com/carlosazaustre/react-fetch-pro
@nico6346
@nico6346 Год назад
Gran material Carlos! Podras hacer en el futuro como hacer una request de POST, PUT y DELETE como un pro?
@diegorivas9031
@diegorivas9031 8 месяцев назад
Podrías ocupar de base el hook del vídeo. La API de fetch te deja especificar que método HTTP tiene que utilizar, entonces puedes pasarlo como parámetro. Y luego pasarle un objeto para destructurarlo con la información que vayas a necesitar.
@CarlosAzaustre
@CarlosAzaustre Год назад
¡Crea tu perfil Freelance hoy en MOTIL. Utiliza el Código CARLOSJS para tener un descuento exclusivo! ► motil.page.link/Carolosjs
@millhiorebt
@millhiorebt Год назад
Lo hice con axios, pero parece que no funciona con snakbar, vi tu otro video para los snakbars, pero no puedo hacerlos funcionar juntos este metodo con snackbars
@SantiagoTuero
@SantiagoTuero Год назад
Consulta profe, algo que no entiendo es en que momento se vería lo del Loading... ya que la idea es que si los user tardan en cargar, estaría bien que aparezca un Loading... o un Cargando usuarios...
@AngelGonzalezM
@AngelGonzalezM Год назад
Nunca te quedas en lo básico. Siempre muestras ejemplos completos que aportan mucho valor. Gracias.
@Jquint3ro
@Jquint3ro Год назад
viendo este video aprendí lo que no habia aprendido en mucho tiempo de estudio. No siempre puedo ver tus videos pero son joyas
@CarlosAzaustre
@CarlosAzaustre Год назад
Muchisimas gracias!! 🤩
@crixus7354
@crixus7354 11 месяцев назад
Lo otro que te quería preguntar es que en cuanto a desempeño, cual es la diferencia entre el custom hook useFetch vs fetchData?
@juanimolfino3274
@juanimolfino3274 Год назад
hola! gracias por el video! consulta, que extensiones usas para el autocompletado de codigo y el control de errores a medida que vas escribiendo codigo? gracias!
@hugoadrianmejiasoteno3469
@hugoadrianmejiasoteno3469 Год назад
.
@danielrangel2623
@danielrangel2623 Год назад
En vue el suspense no necesita tanto protocolo, con el promise en marcha ya tienes para mostrar en caso de error, de espera o si ya se resolvio la promesa, y no hay doble renderizado con o sin funciones de api, que chimbo que te encierres en react, vue es mejor, lastima que vue no tiene el mercado laboral por que no hay una empresa monopilio grande de fondo.
@EmilioVisionTV
@EmilioVisionTV 3 месяца назад
hola cuando hice lo del 6:36, me tiró el siguiente error: url is not defined. por lo visto ud tampoco definió URL pero si le funcionó, que pasa? (ya lo arreglé jaja, era un error mio)
@longyuanchuan
@longyuanchuan 2 месяца назад
excelente forma de explicar y muy buena profundidad de contenido!!
@charlisky
@charlisky 7 месяцев назад
Hola Carlos, un gusto, el video esta maravilloso, pero en mi ultima aplicación me aparece el siguiente error: "A component suspended while responding to synchronous input. This will cause the UI to be replaced with a loading indicator. To fix, updates that suspend should be wrapped with startTransition." ¿Alguna idea de como lo arreglo? Gracias :D
@charlisky
@charlisky 7 месяцев назад
Debo estar omitiendo algo, al final lo hice con el segundo método y funciona perfectamente. Muchas gracias! :D
@arceprog
@arceprog 5 месяцев назад
me pasa lo mismo jaja , y deje el codigo que el tenia pero sigue dando lo mismo
@madeline-z
@madeline-z Месяц назад
Un Profesional Usaría TypeScript, Axios o React Query
@guerrero4833
@guerrero4833 Год назад
alguien me puede ayudar con este error. --------> TypeError: data?.map is not a function
@ThePhoenix21
@ThePhoenix21 3 дня назад
no sabia que era tan fácil consumir apis xD gracias me ayudaste muchisimo :D
@danilocaceres5275
@danilocaceres5275 28 дней назад
Como puedo enviar los datos de un front-end en react (vitejs) a un backen en typescript usando formdata y fetch?
@jheysongiancarloalvarezrea6394
@jheysongiancarloalvarezrea6394 5 месяцев назад
Alguien podría explicarme porque no se usa el async y el await en esta forma?. Gracias.
@dfmontesinos
@dfmontesinos 8 месяцев назад
Carlos, una duda, si tengo una API que me envía un flujo constante y muy alto de datos, el método .aborto() no me funciona, ¿Tiene algo que ver con que la app está renderizado y se relantice?
@mauriciopaiva4056
@mauriciopaiva4056 4 месяца назад
Aplicando el último método, el pro, ¿Cómo podría manejar los errores? Cuando fuerzo un error en la petición, el componente no se renderiza, queda la pantalla en blanco, me gustaría que se mostrara igualmente el título y colocar un mensaje de error o algo por el estilo. ¿Cómo se podría hacer? Gracias.
@potrosanjuan
@potrosanjuan Год назад
Gracias por el vídeo!!! Aunque creo que el último ejemplo aunque evitemos renderizados también dejamos al usuario un poco sin saber que está pasando en casos de cargas lentas.
@lopuma1990
@lopuma1990 Год назад
Yo opino igual, aunque si es verdad que cuando hay un error en vez de enviar un throw, mejor enviar un error y así cuando se hace llamada me duele un data con un error o un response, podría controlar un error.
@YonatanVigilioUsa
@YonatanVigilioUsa Год назад
como consumir api como un profesional. usar react query,swr,rtk query.
@vexardev
@vexardev 2 месяца назад
gran video con este aprendi de una vez como usar fetch con react
@iturraldec
@iturraldec 8 месяцев назад
debido a que el componente de que encapsula el fetch se renderiza al cambiar la url, como hago un "reload", intente creando una funcion dentro del hook...y no me funciono, alguna idea?...gracias!
@vanesanchez5578
@vanesanchez5578 Год назад
Me has explicado todo lo que no en la escuela. Tengo una pregunta, cual seria la ventaja de Axios? porque se entrada, Fetch no parece generar mas código que Axios...
@vexardev
@vexardev 2 месяца назад
muy bien explicado y de una forma muy rapida , excelente tutorial
@danielbeltran6065
@danielbeltran6065 2 месяца назад
Muchas gracias, este video me sirvió para mejorar una app en la que trabajo ❤
@michaelenrique9247
@michaelenrique9247 11 месяцев назад
Me sale este error cuando le doy click al boton de cancelar request: ncaught Error: Objects are not valid as a React child (found: [object DOMException]). If you meant to render a collection of children, use an array instead. he above error occurred in the component: at li at ul at div at App
@prodrigu75
@prodrigu75 Месяц назад
Gran material! Hubiese sido más interesante el ejemplo usando Typescript, para ver por ejemplo si se puede tipar el fetch o algo así. Saludos desde Santiago de Chile
@CarlosAzaustre
@CarlosAzaustre Месяц назад
Muchas gracias @prodrigu75! Tengo en cuenta lo de TS, mi idea es crear contenido sobre TypeScript dentro de poco :)
@evilBetooxx
@evilBetooxx Год назад
que extension utilizas para el autocompletado del código??
@angelleninmorales893
@angelleninmorales893 Год назад
Cual extension en VSC te autocompleta el codigo?
@oscarjair976
@oscarjair976 Год назад
Excelente aporte, solo me quedan dos dudas: La primera es como se podria controlar cuando el endpoint no da respuesta después de cierta cantida de segundos ? y la segunda es depronto porque así lo he trabajo en una plataforma de Ecommerce: porque se hace uso de Node JS para consumir los endpoint desde react ?
@ramondiaz3475
@ramondiaz3475 8 месяцев назад
Que extension usas para autocompletar la sintaxis?
@albhiro
@albhiro 5 месяцев назад
Hola Carlos, Por fin he encontrado alguien que me explique bien y para inutiles e noobs como funciona. Eres un maquina!!😂😂😂😂😂😂😂😂😂
@CarlosAzaustre
@CarlosAzaustre 5 месяцев назад
Me alegro que te haya gustado :)
@alonsourena_
@alonsourena_ Год назад
Excelente video, he aprendido mucho 👍🏻. Solo tengo una consulta, en el segundo 14:02, no sería mejor usar un useRef en lugar de useState, para almacenar el AbortController? Ya que la función del useState no se está utilizando y solo se necesita acceder a la función abort de la instancia del AbortController. Solo pregunto, todos estamos aprendiendo 👍🏻
@sebastiansiman6076
@sebastiansiman6076 Год назад
Hola genio, no soy experto pero creo que useRef se usa para otros enfoques, useRef obtiene una referencia única de un elemento del DOM, en cambio useState es para almacenar un estado. En este caso en vez de usar una variable let que va sobreescribiendo AbortController lo hace dentro de un useState, que es la magia de React. En la documentación dice que es preferible usar useState y evitar el useRef ya que es manejar el DOM de manera imperativa. El useRef usalo en casos que no quede otra, por ejemplo no lo uses para un input del form. Saludos , espero que sume el comentario
@esantdev
@esantdev Год назад
Genial, super facil. Me gustaria saber ahora donde esta el repositorio con el codigo para seguir probando
@CarlosAzaustre
@CarlosAzaustre Год назад
Hola Santiago! Muchas gracias, se me olvidó subirlo, aquí lo tienes :) ► github.com/carlosazaustre/react-fetch-pro
@esantdev
@esantdev Год назад
@@CarlosAzaustre Muchas gracias! Me ha sido muy util, tus videos siempre me ayudan! 🙌
@esantdev
@esantdev Год назад
@@CarlosAzaustre Muchas gracias a vos, me ha sido muy util el video. Consumo mucho tu contenido, gracias por eso tambien!
@leonardotallone3004
@leonardotallone3004 Год назад
Buenas Carlos, esto mismo se podria hacer directamente dentro de UseContext, como para tener el estado "data" en toda la app=?
@maxichavez9099
@maxichavez9099 10 месяцев назад
Lo que usas , que se ve el código antes de que lo escribas como en gris. Una sugerencia predictiva de el código que puede ir. Eso es github copilot?
@CarlosAzaustre
@CarlosAzaustre 10 месяцев назад
Eso es :)
@diegomitmaariza7493
@diegomitmaariza7493 5 месяцев назад
a que se debe el uso de ?, antes del map? Gracias
@gadhager
@gadhager 11 месяцев назад
Cuando hago la aplicación en mi computadora y uso a sincronismo funciona todo. Pero cuando lo subo en el netlify no se consume la API...no trae los datos... Qué magia le tengo que poner para que ande?
@CarlosAzaustre
@CarlosAzaustre 11 месяцев назад
Quizá tenga que ver con la politica CORS (Cross Origin)
@canalxXchamaquitoXx
@canalxXchamaquitoXx 5 месяцев назад
Como dato... Para que les salga el Loading no deben ubicar el read en el mismo componente donde están ubicando el suspense, el que debe tener el read es un hijo del suspense, de esa forma sí podrán ver el Loading mientras la solicitud se procesa.
@mauriciopaiva4056
@mauriciopaiva4056 4 месяца назад
No entendí, por favor, ¿Podrías explicármelo? Y otra cosita, ¿Por qué cuando hay un error en la petición no se renderiza nada del componente? Muchas gracias.
@akatsukistelyos8751
@akatsukistelyos8751 20 дней назад
Videazo, buenas practicas totalmente necesarias para poder hacer escalable el codigo!
@CarlosAzaustre
@CarlosAzaustre 19 дней назад
Muchas gracias!
@pabloosrer4938
@pabloosrer4938 Год назад
como puedo buscar otras apis? 👉👈
@julianvelez6563
@julianvelez6563 Год назад
Saludos carlos comenzare de nuevo tus videos de React jamas me rendire
@djjordis
@djjordis Год назад
Excelente explicacion. aprendi varias cosas nuevas. Muy bueno!
@rafaelrafael4843
@rafaelrafael4843 Год назад
Hola, si funciona, se mira bien cajeta el renderizado, solo que me gustaria que la pagina no se fuera hacia arriba siempre, digamos que estoy renderizando unas cards, entonces me gusta el efecto de que todo se renderice de golpe... Pero que tal que el cliente esta navegando, hace click en una de las cards y luego en su celular o cualquier dispositivo le da al boton "atras", el deber ser pienso yo que es que cuando regrese a navegar la pagina continue en la posicion que estaba antes de meterse al detalle de esa card... Tendrás una idea de como se soluciona eso ?? Ya le he buscado mucho... antes de aplicar tu tecnica estuve colocando arrays estaticos con useEffect pero es el usseEfect en si el que hace que se hagan scrolls "locos" cuando viene data dinamica... Gracias amigo
@rafaelrafael4843
@rafaelrafael4843 Год назад
Nota, cuando coloque: "solo que me gustaria que la pagina no se fuera hacia arriba siempre"
@luisberoiza227
@luisberoiza227 Год назад
Super Informativo!! Maravilloso contenido, Gracias!!! Me encantó el theme de tu visual studio code. cual usas??
@asyncFlex
@asyncFlex 10 месяцев назад
si no expecificas el metodo get, post o cualquier otro, por defecto estas haciendo un get?
@CarlosAzaustre
@CarlosAzaustre 10 месяцев назад
Si, el GET es el por defecto
@d-landjs
@d-landjs 4 месяца назад
Que grande maestro!! También sería genial que hayas una versión para Post, Put, Patch y Delete
@carlosraul6578
@carlosraul6578 4 месяца назад
espectacular vídeo, tal vez un apéndice a este puede ser el uso de SWR o React Query
@CarlosAzaustre
@CarlosAzaustre 4 месяца назад
Buena idea. Lo tenía pendiente, a ver si saco tiempo para prepararlo :)
@iturraldec
@iturraldec 8 месяцев назад
excelente video!...me suscribi!!
@miguelvasquez9849
@miguelvasquez9849 Год назад
yo estoy teniendo un problema, cuando implemento el "AbortController" me deja de funcionar el "Loading", yo veo que se muestra como medio segundo y desaparece. Me di cuenta que cuando se renderiza el componente y se hace el fetch, el "AbortController" queda en "aborted" y siempre capturo en el catch un "AbortError" no se porque.
@DACayus
@DACayus 8 месяцев назад
Me encantó el manejo de promesas, imagino qué así se puede implementar en python u otro lenguaje que no tenga el async await. Me suscribo 👋
@alvaroaguerre3149
@alvaroaguerre3149 9 месяцев назад
Que buen video si que es fetching like a pro, a partir de ahora solo haré fetchings like you xD
@crixus7354
@crixus7354 11 месяцев назад
Hola Buenas Tardes. Estaba viendo tu video y me gustaria saber por qué en la versión que usas la función fetchData la ejecutas fuera del componente App y no dentro justo antes del read?
@omarvictoria1229
@omarvictoria1229 Год назад
buena aportación pero mi duda es... entonces para que pones el Loading si no lo va a ocupar... un dislike por querer engañarnos jajaj aparte haciendo pruebas, no hay control de errores, haces guardado en visual te salen un buen de errores, no hay cancelación de petición, muy mal el video, ibas bien y la arruinaste queriendo dar atole con el dedo dirían en mi pueblo jajaja
@zoclorevnxrz
@zoclorevnxrz Год назад
Bro estuve viendo que Reactjs está muriendo y que ahora es mejor el rendering en el server y demás... Que tan cierto es esto? Quiero aprender Reactjs que debo hacer?
@nihil_um
@nihil_um Год назад
Una maravilla saber cómo funcionan las cosas por debajo. Muchas gracias por estas perlas.
@sebasx200
@sebasx200 4 месяца назад
Esta es una forma excelente de optimizar mis peticiones get,.¡Te agradezco mucho el esfuerzo y la dedicación a este video!
@NeoAres1
@NeoAres1 8 месяцев назад
Buah! Me has venido como caído del cielo. A probar el Suspender 🤓
@pepev.oyarzun3170
@pepev.oyarzun3170 Год назад
Tienes de casualidad el como insertar datos de manera profesional consumiendo API con promise?, este video fue una maravilla, felicitaciones...
@Epsaind
@Epsaind Год назад
Explicas super bien , esta super bueno el video, la verdad es que aprendí un monton de cosas nuevas a la hora de hacer peticiones fetch , gracias , espero puedas subir mas contenido asi !
@antonytorreslopez8025
@antonytorreslopez8025 Год назад
Ahora bien, muy buen video y todo, pero que pasa cuando tengo que consultar al api por parámetros que me da el usuario? Eso funciona bien si es solo mostrar datos, pero normalmente siempre se reciben datos del usuario para poder buscar en api, los datos deseados, utilizando eso, como le pasaría parámetros de un formulario?
@nicohernandez5996
@nicohernandez5996 Месяц назад
Gracias por tanto , tu libro de Javascript es mi Biblia 👏👏👏
@yohcg
@yohcg Год назад
Nice. El comentario más corto que he puesto.
@CarlosAzaustre
@CarlosAzaustre Год назад
Lo bueno si es breve, dos veces bueno:)
@obem12
@obem12 Год назад
Gracias por el video, todo muy bien explicado. Nuevo subbbbb
@juanscasado
@juanscasado Месяц назад
Carlos Gracias Hermano, mantente así mente a na` usted es bueno, Dios te bendiga.
@Rvjonh
@Rvjonh Год назад
que pasa cuando se hace fetch y demora mucho tiempo en cargar?, el usuario vera una pagina en blanco todo el tiempo?
@AlberthEmperador
@AlberthEmperador Год назад
Buen video, una pregunta, fetchData siempre debe ir fuera del componente? en este caso fuera del componente App
@miguelgil2172
@miguelgil2172 Год назад
Me gusta mas esta formaornaizar el codigo de las promesas, lo entiendo mas , que con el async , await , try , catch, if , else.
@maclaren33
@maclaren33 3 месяца назад
Excelente explicación sobre todo la del. Abort no la sabía
@th_o_th
@th_o_th 3 месяца назад
Esto es oro puro.
@marcomontenegro8157
@marcomontenegro8157 8 месяцев назад
Lo mejor que he visto, Gracias, Saludos desde Caracas Venezuela
@ElPolemista
@ElPolemista Год назад
10:46 no sería mejor un useRef para evitar renderizados extra?
@cryptokanopix7115
@cryptokanopix7115 Год назад
Carlos, soy beginner y quiero construir un dashbard para consumir APIs de mis servicios Cloud SaaS que tebgo con clientes de Cisco, Extreme, Aruba.. que me recomiendas para empezar y probar?? Gracias por tus recomendaciones.
@ValentinWF
@ValentinWF Год назад
Bien, pero el método del final es más clean pero no te muestra un loading a no ser que la app falle …
@ZX226
@ZX226 Год назад
Es justo lo que también estoy observando. Si el fetch falla, va a decir "Loading" y se va a quedar ahí siempre, además si el Loading no se muestra mientras carga, para que implementarlo ahí con esa metodología (Render-ad-you-fetch)? Me gustaría ver una forma de utilizar la metodología "Render-ad-you-fetch" con un Loading que funcione como al principio
@carlosfranco8377
@carlosfranco8377 Год назад
Excelente clase, pero tengo ciertas dudas a la hora de manejar el url. Estoy manejando una poke api y mediante mi input no me aparece el pokemon que establezco en este caso!
@kikiricocho
@kikiricocho Год назад
como se llama la extension que usas para que al poner .then te cree todo el elemento? Gracias por el video
@festerico77
@festerico77 Год назад
el user que usas en el .map , es una palabra que puede ser cuaquier palabra? o usas ese termino por que en el array que devuelve la api dice user ?
@JesuscarlosAlmedamacias
@JesuscarlosAlmedamacias Год назад
Gracias me ayudaste a resolver una problema que tenia desde hace 2 dias, esoy nuevo en REACT
@edgardomolinagonzalez3121
@edgardomolinagonzalez3121 Год назад
Profe ¿Redux reemplaza el reducer y el useContext?
@victorm.ottatig.4706
@victorm.ottatig.4706 Год назад
Muchas gracias por el video, esta genial, vas a subir el codigo a github?
@CarlosAzaustre
@CarlosAzaustre Год назад
Muchas gracias Victor!, se me olvidó subirlo, aquí lo tienes :) ► github.com/carlosazaustre/react-fetch-pro
@nicopiero6008
@nicopiero6008 Год назад
Excelente video Carlos! Me sirvió mucho. 👌🙏🙌
@esaraviam
@esaraviam Год назад
genial Carlos, buenos recursos. seria bueno algo que muestre como enviar peticiones POST PUT DELETE etc like a PRO
@SebastianPerez-dw9rd
@SebastianPerez-dw9rd 5 месяцев назад
Excelente!
@eelgu001
@eelgu001 Год назад
excelente video, como lo hacen para autocompletar textos?
@FernandaMorales-uw3wg
@FernandaMorales-uw3wg Год назад
idolo!
@juanfernandez2306
@juanfernandez2306 Год назад
👋 hey tremendo tips. Gracias por este valioso contenido.
@Deus-lo-Vuilt
@Deus-lo-Vuilt Год назад
Estuve esperando este día 😂😂ajajja mas videos así 👌👌
@guillermosg7950
@guillermosg7950 Год назад
Lo que me costó a mí entender el array vacío del useeffect y era algo tan simple como "se renderiza una vez cuando se monte el componente" eres dios Carlos ♥️
@angelcg635
@angelcg635 Год назад
Si lo analizas bien useEffect no es más que una función que recibe dos parámetros un callback y un array de dependencia, si está vacío el array solo llama al callback una vez de lo contrario llamará cada que las dependencias cambien
@guillermosg7950
@guillermosg7950 Год назад
@@angelcg635 gracias amigo
@deykergil
@deykergil Год назад
Esta perfecto! Como se llama la fuente que usa en el editor?
@CarlosAzaustre
@CarlosAzaustre Год назад
Mil gracias Deyker. La tipografía que utilizo se llama Lilex.
@Deus-lo-Vuilt
@Deus-lo-Vuilt Год назад
¡Explicas superbién, ojalá sigas subiendo material como este!
@asolounbit598
@asolounbit598 Год назад
Excelente video Carlos, como gastaría mas apps con un poco mas de frontend, y aplicar esto en diferentes ambientes.
@codigito
@codigito Год назад
Buenos típs gracias por los vídeos compa
@js12jorginho
@js12jorginho Год назад
muy bien video!! muchisimas gracias por el conocimiento 🔥 Me sumo a otros comentarios de hacer un proximo video con metodo post como un pro
@vinlo8966
@vinlo8966 Год назад
que tema utilizas en el video Carlos???
@caelum16007
@caelum16007 Год назад
No seria mejor usar react-query?
@xde214
@xde214 Год назад
Mientras menos paquetes uses en tu app mejor, ya que mientras mas paquetes mas actualizaciones, vulnerabilidades, lo que se traduce en mas trabajo de mantenimiento para vos. Mientras el paquete que estás utilizando no sea indispensable es mejor usar funciones nativas en este caso de node.
@sneidergallegosmarin1848
@sneidergallegosmarin1848 Год назад
Genial, preciso estaba teniendo algunos problemas con la comunicación a las API. Gracias
@CodeMusic123
@CodeMusic123 Год назад
me dejo un porquito perdido, pq no usar el aync y demas ?...mejor dicho pa onde, no siempre mas poquito codigo es mejor.... nuevo sub 😁
@CarlosAzaustre
@CarlosAzaustre Год назад
Async puedes hacerlo igual, ASYNC/AWAIT y el .then de las promises es lo mismo.
Далее
荧光棒的最佳玩法UP+#short #angel #clown
00:18
#kikakim
00:10
Просмотров 11 млн
¿Qué es una API? - La mejor explicación en español
12:11
Lo Básico sobre Fetch / Promesas y Async Await
11:46
TypeScript in React - COMPLETE Tutorial (Crash Course)
53:21
Context API in react | get the concept
29:00
Просмотров 59 тыс.
荧光棒的最佳玩法UP+#short #angel #clown
00:18