This graph shows how many times the word ______ has been mentioned throughout the history of the program.
Ahora mismo, si os fijáis, a lo mejor lo estáis pensando, que este title es estático, es JSX estático, pero la gracia de las librerías de componentes y de VirtualDome es que te permite hacer componentes funcionales y parametrizarlos.
Entonces, esto no estaba en el artículo y creo que puede ser guay.
Me parece súper interesante.
Pues venga, vamos a hacer otro ejemplo.
Vale, vamos a intentar, no sé si modificar este title o hacer otro.
Voy a hacer otro.
Hacemos otro.
Así que tienen que funcionar los dos.
Exacto, los dos tienen que funcionar.
Entonces, vamos a dejar este render aquí.
Voy a mover esto un poco abajo, un momento.
Vamos a seguir a Dani.
Vamos a dejar la función aquí arriba, de render.
Vale, y vamos a hacer otro ejemplo aquí.
Vamos a renderizar, por ejemplo, un label.
Me lo invento.
O un subtitle.
Un subtitle, venga, un subtitle, que quedará más claro y más visual.
Vamos a hacer que esto sea una función, lo típico, como si estuviéramos escribiendo React,
que va a recibir un text.
Vale, estas serían como las props que le llegan al componente.
Estas son las props, y esto va a ser un h2, y dentro voy a pintar el text.
¡Wow!
Vamos a dejarlo así sencillo, sin atributos ni nada, un poco para ver cómo funciona.
Y voy a pintar un par.
Vale, voy a hacer un render de un par de ellos.
Fijaos que voy a hacer document body, happen child, va a ser un render de, voy a llamarlo
con mayúsculas.
Sí, porque este es otro tema interesante.
Exacto.
Claro.
Subtitle, y le voy a pasar como prop, text, igual a probando componentes funcionales.
Bueno, con esto ya estaría.
Vale, nos faltaría cerrar.
Nos faltaría cerrar el tag.
Eso.
Muy bien.
Claro, y ahora nos está follando, ¿no?
Porque dice, no puedo crear un elemento en el document con el tag que me estás pasando,
porque le estamos pasando como el tag subtitle, que no existe, no es un elemento que tengamos
en el DOM, es un componente que estamos creando nosotros justamente en esta línea, en la línea
27.
Exacto.
Entonces, claro, ¿dónde tenemos que solucionar esto?
Esto es un truño.
Esto es un truño como un puño.
Esto es un truño como un puño.
Vamos a ver un momentito en qué se convierte este subtitle.
Vale.
¿Vale?
Vamos a coger este subtitle, aquí un momento, y vamos a ponerlo en consola.
Venga.
Voy a quitar el de title, ¿vale?
Y así quedará más claro el del subtitle.
Sí, lo que voy a comentar esto para que no...
Ay, mira, no puedo hacer comentarios.
Ahora.
Voy a imprimir esto por consola a ver en qué me lo convierte.
Vale.
Esto, vamos a ver que esto es un poco diferente del componente de title, porque el type es
una función.
Las props siguen en su lugar y no tiene children.
Entonces, el truco aquí es en nuestra función render hacer una distinción.
Cuando node type sea una función, lo que voy a hacer es ejecutar la función mandándole
las props.
Y eso me va a devolver el componente que toca.
Así que vamos a probarlo.
Vale.
Aquí al principio en node, en render, perdón, voy a hacer if type of node type function, voy
a hacer un tratamiento diferente.
Lo que voy a hacer va a ser ejecutarlo.
Pasándole.
Voy a ejecutarlo.
Voy a llamarle result.
Es un nombre horrible.
Uno de los grandes problemas de la programación.
El naming.
El naming.
Vamos a hacer node type.
Y como sé que es una función, la ejecuto y le paso node props.
Y esto, vamos a imprimirlo a ver qué sale.
Vamos a borrar este de aquí.
Ah, bueno, no, no lo puedo borrar, pero lo tengo que renderizar igualmente.
Vamos a ver.
A ponerlo aquí donde estaba antes.
Le comentamos, ahí está.
Y quitamos este console.log.
Vale.
Y vamos a ver, aquí tenemos el resultado de ejecutar la función.
Vemos que tenemos el h2 y no me llegan props, pero me está llegando un children que sería
el children del h2.
Entonces, ¿qué hacemos con esto?
Pues renderizarlo, tal cual, y hacer un ratón.
Vamos a...
Vale, hay que volver entonces al render.
Venimos al render, quitamos el console.log.
Y lo que voy a hacer es llamarme a mí mismo.
Esto es recursividad.
Ah, y recursividad.
Ah, y recursividad.
Con el result.
Y ahora me está petando...
Claro, porque tenemos que hacer un retur.
Espera, porque tengo que hacer un retur.
Nada, tranquilo.
Muy bien.
Iguala.
Y tal, perfecto.
Claro, tenemos que hacer un retur porque te estaba petando.
Básicamente porque si no hacíamos el retur.
Porque seguía ejecutando.
Y decía, vale, vale, esto está muy bien, pero yo sigo para adelante.
Entonces, recursividad.
¿Cómo era el chiste este de la recursividad?
Ah, bueno, no lo sé.
¿Solo puedes entender la recursividad cuando has entendido la recursividad?
Ostras, hombre, tiene todo el sentido del mundo, ¿eh?
O esto era de las monas, o...
Bueno, da igual.
No sé, pero van por ahí los tiros.
Es que el problema de recursividad, la verdad, es que es una caja que se te puede hacer...
Es peligro.
Tiene mucho peligro, ¿no?
Es peligro.
Es el típico ejemplo de Fibonacci que hacemos todos en la universidad.
Sí.
Que ahí todo parece muy bonito, ¿no?
En Fibonacci, pues se entiende y está muy controlado.
Pero claro, en temas así es más difícil de controlar.
Tienes que tener los condicionales dentro de tu método muy controlados para evitar llegar a un loop infinito
o cosas totalmente inesperadas.
O un retur que no hay.
O un retur que no hay.
A mí siempre en una función recursiva tienes que tener una condición de salida.
Sí.
Porque si no entras en un bucle infinito.
Exacto.
Y está CoverFlow y este tipo de cosas.
Pero son súper útiles.
Claro, lo que mola de esto, entonces, es que...
Ojo, ¿eh?
Ya con la recursividad.
Entonces, si el resultado que intenta renderizar vuelve a ser una función, también debería funcionar.
Claro.
Claro, porque recursivamente va a decir, vale, vuelve a renderizar esto.
Pero entonces va a haber...
Claro, si tú tienes un componente custom, por así decirlo, que son los funcionales, que llama a otro componente custom,
se va a volver a llamar hasta que encuentre un componente que sepa renderizar.
Madre mía, ya a lo que estamos llegando aquí.
Exacto.
Muy bien, muy interesante.
Bueno, de hecho, para que veáis que tenemos este h2 con el texto, que además, claro, es uno muy interesante porque has puesto...
Claro, es que el texto tiene que ser un chill, ¿no? Al final.
Claro.
Si no, no hay tu tía.
Claro.
Si miramos aquí el html, claro, que podemos ver el h2 perfectamente cuando tú en realidad estás utilizando tu propio componente subtitle.
Exacto.
O sea, que ya hemos creado... Bueno, has creado aquí básicamente el texto.
Ya has creado él. Lo ha hecho todo él.
Hemos creado ya... Bueno, es que me gusta incorporarme.
Me gusta, me gusta.
Me gusta.
O sea, el concepto de componente.
Exacto.
Salud utilizable.
Claro.
Ya el subtitle lo podríamos utilizar más de una vez.
Exacto.
Interesante.
Entonces ya puedo hacer otro subtitle si quiero. Es que puedo coger y decir, bueno, voy a usar el mismo componente, pero...
Claro, pero pasándole otro...
Este es otro subtitle.
Y ya está.
Ya está.
Y ya está. Y estoy reutilizando el subtitle para parametrizarlo.
¿Con qué? Con 30 líneas de código.
O sea, esto es muy interesante porque si cuando te dijeron... Bueno, puedes utilizar... Puedes hacer esta prueba técnica, pero solo con Vanilla JavaScript.
Sí.
Pero te encanta utilizar React.
Exacto.
Porque es que la API de React o cualquier librería que se parezca a React, la verdad es que es muy cómoda a la hora de manipular el DOM.
Claro.
Todavía, y seguramente veremos más adelante cómo añadirle eventos y todo esto.
Claro, claro.
Porque faltaría el onclick y estas cosas.
Pero realmente para formar la estructura del HTML es súper útil, ¿no?
Y en la prueba técnica hubieras hecho esto y a lo mejor...
Que a lo mejor ahora...
Ahora está en otro sitio.
Está en otro sitio, pero nada.
Pero bueno, Dan y Dom...
Espero que vean este vídeo y se den cuenta de lo que se han perdido.
Pero bueno, totalmente.
¿Lo habéis perdido?
Totalmente.
¿Lo habéis perdido?
Totalmente.
Di que sí.
Vale.
¿Quieres continuar con alguna cosa?
¿Qué hacemos?
A ver, podemos...
Me estoy animando, ¿eh?
Te estás animando a tope.
Yo cuando me dijiste de venir a hacer el vídeo pensaba...
Pues esto no me va a salir en directo.
Pues mira, fíjate en todo lo que te ha salido.
Aquí estamos.
Venga, vamos a hacer la última función.
Venga.
La dejamos aquí y así seguiremos en otra entrega.
Sí.
¿Vale?
Si la gente le da...
Un reto.
Si la gente lo comparte en las redes sociales y dice...
Me ha encantado el Dan y Dom de Dan y Def.
Queremos más.
Y queremos más.
Yo vengo otro día.
Vendrá otro día, se comerá un croissant de mascarpone y hará la segunda parte.
Exacto.
Lo que nos podíamos comer el croissant frente a la cámara.
En directo.
Haremos eso.
Venga.
Para que la gente vea que no nos lo inventamos.
Vale, la última.
La que tú prefieras.
A mí, personalmente, me gustaría la de los children.
Vamos a ver los children.
¿Qué te parece?
Venga, va.
¿Qué intentamos pintar?
Que estoy un poco...
Vale.
...pájaro y no se me ocurre nada.
¿Qué te parece?
Pues una lista.
Podemos hacer como un menú, que no es un menú, ¿vale?
Bueno, una lista numerada.
Una lista numerada.
Venga, vamos a hacer una lista numerada.
Vamos a intentar renderizarla.
A mí lo que me gusta hacer cuando haga este ejercicio...
Que este ejercicio lo podéis hacer como una cata también.
Claro.
Me gusta intentar pintar algo, imprimir el resultado de Danidon, en este caso por consola,
e intentar hacer...
Te ha encantado el nombre.
Sí, lo voy a cambiar.
Intentar hacer...
Perdona.
Eso, una vez lo imprimas por consola, te das cuenta de cómo Babel te está transformando
tu JSX.
Y entonces resuelves ese problema en tu función render.
Entonces vamos a hacer una lista.
Y esto va a ser un render de...
Vamos a poner Miguel...
Ese soy yo.
Y Dani.
Cerramos el UL.
Y a ver qué está pasando aquí.
¡Ay, uy, uy!
Object, object.
Object, object.
Object, object.
Esto me encanta, el object, object.
Lo estamos liando, parda.
Uy, ¿qué está pasando?
Vamos a ver qué está pasando.
Pero a ver, si inspeccionamos el HTML, vamos a ver aquí.
Hombre, el UL lo ha pintado.
Pero el I, el I, se ha hecho un poco la picha a un li.
Ha entendido el UL, porque el UL es el componente de primer orden, por así decirlo.
Pero con los children no estamos haciendo ningún tratamiento en la función react, si
os fijáis.
Claro.
En el render, ¿no?
En el render.
¿Dónde estaría entrando esto?
No es type function.
No es una function.
Vale.
Entonces iría hacia abajo.
Hace el createElement del nodeType, que es el UL.
El UL.
Le aplica las props, que en este momento no tiene.
Vale.
Pero no recorre los children.
Claro, aquí no hemos visto nada de...
Bueno, de hecho, claro, está haciendo createTextNode utilizando los children.
Exacto.
Ahí está el problema.
Pero esto no es exactamente lo que queremos.
Claro, entonces hay que hacer un tratamiento e inspeccionar los children.
Si los children son un textNode, pues renderizamos el textNode.
Si es otra cosa, pues hay que ver que hacer otra cosa.
Entonces, vamos a imprimir primero en este punto.
Bueno, vamos a hacer ese tratamiento solo para el textNode, por ejemplo.
If type of nodeChildren equals string.
Vale.
Vamos a hacer esto.
Vale.
Con esto deberíamos dejar de ver...
Con esto deberíamos dejar de ver el object.
Bueno, de hecho hemos dejado de verlo todo.
Ya hemos dejado de verlo todo.
No sé por qué.
Se le ha ido la flapa.
Bueno, es que puede ser que children sea un array.
Claro.
Aunque sea de una posición.
Sí, el children es un array.
Entonces, esto, claro, no puede ser...
Claro, no está diciendo...
No, el children...
Si seguramente ponemos aquí un console.log type of nodeChildren, nos va a decir que es un array.
Por lo tanto, lo que deberíamos hacer...
Ah, no.
No es...
Pero el type of de un array...
Ya.
Sí.
Es object.
Sí, tenemos que poner array es array.
Y si esto nos da true...
Bueno, también podría haber mirado el...
Sí, lo que no entiendo es por qué no sale nada ahora.
Es un array.
No tiene mucho sentido que no salga nada.
Bueno, no sale nada porque ahora ya no estamos transformando...
Claro, como estamos diciendo...
El type of node.children es un string.
Si es un string, entonces crea el textNode.
Y entonces no está creando los textNodes.
Ah, claro, claro.
Ah, vale, vale, cuidado.
Claro, aquí no queda...
Cuidado, es verdad.
Cuidado, cuidado.
¿Te acuerdas que te he dicho que me faltaba una cosa aquí en el...
Exacto, que lo hemos dejado al principio.
Que lo hemos dejado por el final.
Sí.
Ahora es el momento.
Aquí arriba, ¿no?
Vale, entonces, aquí.
El problema está aquí.
Es verdad, el problema está aquí.
El problema es que Arcs...
Vamos a ver lo que es Arcs.
Es un array.
A veces es un array con un string y a veces es un array de objetos.
Vale, vamos a ver aquí en la consola.
A veces es un array de strings, a veces es un array de objetos.
De hecho, aquí podemos ver los títulos, ¿no?
Hola, Miguel, he probando componentes, el subtitle, bla, bla.
Y vemos aquí los Lee, básicamente los Lee, que son objetos.
Claro, son un objeto.
Es un array de objetos.
En cada array de objetos tenemos el type, el props y el children.
Que el children vuelva a ser un array.
Lo que sabemos seguro es que los children van a ser siempre un array.
Lo que pasa es que dentro a veces son strings, cuando solo ya no tienen, digamos, más profundidad.
Y luego, si no, pues pueden ser objetos.
Exacto.
Vale.
Entonces, vamos a ver cómo tratamos esto.
Porque ahora...
No se me ocurre nada.
¿Cómo podés?
Estoy en blanco, amigos.
No pasa nada.
Somos humanos.
No, no pasa nada.
A ver, es que también...
Esto está complicado.
A ver.
¿Qué podríamos hacer?
¿Qué podríamos hacer?
Podríamos hacer...
De hecho, es que siempre es un array.
Lo que podríamos hacer...
Siempre es un array, claro.
Lo que habría que hacer...
Es iterarlo, por ejemplo, y ver si son strings.
Hacemos el...
El...
Create text node.
Y si no, pues ya vemos.
Entonces, nunca va a ser un array.
Entonces...
O sea, nunca va a ser un string.
Perdón, nunca va a ser un string.
Siempre va a ser un array.
Vamos a iterarlos.
No, ¿cómo es?
Node.children
ForEach.
Child.
Y aquí sí que vamos a hacer esto que estaba haciendo.
Exacto.
Y esto...
Ahora sí que debería funcionar.
O me está timando.
No, Node.children no.
Sí, child.
Child es un string.
Ah, exacto.
Ahora hay que actualizarlo de dentro.
Render hizo el child.
Exacto.
Vale, esto ya empezaba.
Vale.
Ahora hemos recuperado al menos el comportamiento que teníamos antes.
Te paso esto por aquí.
Si no es un string, es un objeto.
Y si es un objeto, vamos a imprimir a ver lo que es.
Console.
Lock.
Me encanta porque, Dani, programas como yo.
Aunque vas haciendo una cosa...
Es que esto se lo digo a mucha gente, ¿no?
Sí.
Hace una cosa, que funcione esa cosa, para...
Ya.
Asegúrate, porque si tú no vas parando y asegurándote...
Bueno, esto es mi forma de programar, ¿eh?
Sí, sí.
Y veo que tú lo estás hablando ahí.
No, también, también.
Totalmente.
Pero hay gente que se pone ahí, booooh, y entonces de repente ya dices, no me funciona
nada.
Sí.
Y tienes que dar cuatro pasos para atrás y ya no sabes dónde te has quedado.
Es que hay gente que es muy inteligente y puede pensar muchos pasos por adelantado.
Totalmente.
A mí lo que me pasa es que cada paso que doy lo tengo que asegurar.
Es como cuando escalas... La gente que hace escalada te lo explica, ¿no?
Sí, sí.
Cada clavo que pones tienes que asegurarlo y tal antes de quitar el...
Vale, pues así.
Bueno, yo pienso muy despacio.
Clavo, drive, and development.
Clavo, drive.
Me encantó.
Entonces, mira, mire lo que tenemos aquí abajo.
Vamos a la consola y vale.
Vemos los LIs, ya los tenemos en algo que nuestra función render puede tratar.
Un objeto y un objeto.
Este es este console.log que hemos puesto aquí.
El console.log que hemos puesto aquí.
Voy a quitar console.logs para que no moleste tanto.
Sí, sí, tenemos ya.
Porque ya tengo unos cuantos.
Este es de los Arcs.
Sí, quítale los Arcs.
Que hemos dejado por arriba.
Vale, tenemos los textos.
Lo que sí que tengo que hacer aquí es hacer un return.
Porque si no...
Sí, para que deje a mi hijo.
Vale, muy bien.
Ahora ya solo tenemos aquí el de los type.ly.
O sea que algo tenemos que hacer con estos.
Sí.
Que además ya está guay porque nos está dando una pista, ¿no?
Este tipo de objeto con el tipo las props y las children.
Y justamente tenemos por ahí nuestro render.
Es que nuestro render, yo me apuesto lo que quiero.
Es que nuestro render ya es capaz de renderizar esto.
Sí, vamos a probar.
Yo creo que sí.
Vamos a hacer un return.
Y si no, volvemos para atrás.
Vamos a hacer un return aquí de render shell.
Y no lo vemos.
Ay, ay, ay.
¿Qué ha pasado?
¿Qué ha pasado?
No lo vemos.
Ah, no, porque tengo que hacer el append.
Tengo que hacer el append.
Vamos a ver.
De lo que devuelva la...
De lo que devuelva la función render.
Vale.
Que si no...
Oh, bravo, caballero.
Felicidades.
Muy bien.
Aquí lo tenemos.
Efectivamente, claro, lo que estamos haciendo aquí, aquí estamos creando el text node.
Y teníamos que hacer el append shell del mismo elemento, que el elemento es el ul, es la lista, y estamos diciéndolo, vale.
Pues, de cada children, mira a ver si es un string, porque esto es súper interesante.
Porque podríamos, en la lista esta, de hecho lo podríamos hacer para que se vea.
Sí.
¿Dónde teníamos la lista?
Aquí, perdón.
Abajo.
Pongamos que aquí pones pepito.
Deberíamos ver ahí pepito.
Veamos pepito.
Claro, porque ha sabido diferenciar lo que era un objeto a lo que era un texto.
Exacto.
O sea, lo ha ido con la recursividad, ha vuelto a llamar a render, ha ido para todo el árbol.
Es que aquí se te puede volar la cabeza cuando ya tienes un árbol de elementos muy bestia.
Ahora, por suerte, bastante sencillo, ¿no?
Sí.
Dentro del ul, mira a sus hijos y tal, vale, dice, es un string, pues hace esto.
Si no es un string, vuelve a llamar a la función render, le pasas el child, que ya tienes el tipo, las props y sus children.
Tremendo.
Y ya está.
Espectacular.
Me ha encantado.
Y ya está.
Además, con la sencillez de tan pocas líneas y que lo hayan, no sé, me parece muy bien, muy guay.
A mí me gustó mucho cuando hice el ejercicio este de implementar esta librería porque se demistifica mucho todo el tema de React y librerías,
Preact, VJS y todo esto, porque lo entiendes a un nivel muy, muy bajo.
Obviamente, estas librerías tienen todo tipo de optimizaciones a las que no vamos a llegar.
Y mucha más magia, claro, claro.
Tienen todo el tema del estado, tienen el tema del diffing, porque, bueno, porque tienen un trabajo detrás.
Pero, claro, cuando te piden implementa algo en Vanilla.js, dices, vale, yo lo implemento en Vanilla.js, pero quiero trabajar con tu JSX porque es cómodo y porque hago menos código y ya está.
Porque imaginaos hacer esto sin Babel y sin JSX.
Ya.
Sí, sí.
Nuestras funciones serían mucho más complicadas.
Totalmente.
Súper interesante.
Para terminar, Colofón, entiendo.
Si yo saco esto.
Sí.
Lo saco aquí a un componente.
Sí.
Y le llamo menú.
Ay, menú.
Y hago así.
Y hago esto aquí.
Esto debería funcionar si lo renderizo.
Sí, si haces...
Y ahora quitamos esto.
Y hacemos, no, es que yo...
Y renderizas el menú como Tag Custom.
Así.
Y aquí está.
Aquí está.
Eso es espectacular.
Magia.
Magia, total.
Lo puedes parametrizar, le puedes pasar un array.
Al final esto te va a ejecutar la función.
Claro.
Tú puedes pasarle un array con Miguel y Dani, si quieres.
Claro, vamos a poner...
Solo con los strings.
Vale.
Le paso solo...
Vale, pongo...
First...
Name y SecondName.
Sí.
Vamos a...
Sí, por no...
Por no liarla.
Y SecondName, SecondName...
Vale.
Bueno, Pepito, vamos a quitarlo.
Vamos a quitar el pepito.
Vale, ¿qué me dice?
Ay, que no puede leerlo de null.
Vale, porque...
Bueno, esto también es una cosa que podríamos arreglar, que si las propias en null, pues que...
Ah, vale, sí, claro.
Bueno.
Name, pues vamos a poner que el primero...
Claro, lo tienes que...
Daniel...
SecondName...
SecondName...
Ay, ay, ay.
Ya me está apelando algo.
SecondName...
Bien, nada, ya está.
Ahí lo tenemos.
¡Pum, pum!
Ya está, ya está, ya está.
Espectacular.
Aquí tenemos ya nuestro componente reutilizable.
Nada.
Una maravilla.
Aquí lo tenemos.
Bueno, pues nada, caballero, muchas gracias por venir y por enseñarnos todo esto.
A mí me pareció súper interesante y, bueno, eso, que si todo el mundo se pone a compartirlo
y le ha gustado, yo creo que habrá que hacer una segunda parte, pues para ir un poquito
más allá, no sé, ¿qué nos queda por ver?
Bueno, nos queda, por ejemplo, cómo gestionar eventos, nos queda cómo actualizar solo el
componente que ha cambiado, que eso es algo súper interesante.
Interesantísimo eso.
Porque una cosa guay que hace... Voy a hacer un poco de publicidad.
¿Puedes abrir mi librería que tiene una GitHub page?
Si no me equivoco.
Sí.
A ver.
Es Joltik.
Joltik.
Diría que tengo una GitHub page donde...
Ah, no la tengo.
Bueno, aquí tenemos...
Sí, para el que le interese, aquí está el repositorio de Dani.
Joltik a micro VDOM Library for Learning Purposes.
Sí.
Yo ya le he dado una estrellita, ¿eh?
Bueno.
Y os animo a todos que le deis una estrellita y que le echéis un vistazo.
Aquí tenemos...
Este es el bichillo, ¿no?
Este es el bichillo.
Bueno, esto no es production ready, ni mucho menos.
Sí, sí, no.
Utilizarlo para aprender...
Claro.
Esto, disclaimer, disclaimer.
Disclaimer, que luego te van a ir a buscar.
Yo he utilizado mi empresa, que tenemos un millón de visitantes.
Bueno, lo que quería enseñar de esta librería es...
Tengo una función en la que aprieto un botón y cambio los elementos de una lista.
Lo guay es abrir el inspector y ver que solo se renderizan esos dos.
Que es algo que también es bastante sencillo cuando te pones a implementarlo.
Claro, es un diffing.
Un diffing.
Es un diffing.
Que es lo que hace React.
React solo te cambia los elementos, los componentes en los que han cambiado las props.
Vale, pues ¿qué te parece eso?
Eventos y diffing para la siguiente entrega.
Venga, vale.
Cuando la gente se vuelva loca a compartir, a darle like y todo esto.
A ver.
Guay.
Bueno, pues nada.
Muchas gracias por vernos.
Muchas gracias, Dani.
De nuevo por estar aquí.
Gracias a ti por invitarme.
Nada, sí.
Es un placer y más aprendiendo estas cosas como hemos aprendido.
Que todavía estoy aquí picueto.
O sea, en 50 líneas de código.
Tremendo.
Bueno, chicos.
Muchas gracias por vernos a todos.
Suscríbete al canal, dale like, compártelo, que se lo ha currado un montón, Dani.
¿Lo podéis seguir?
¿Dónde podéis seguirte, Dani?
Pues en Twitter.
En Twitter.
DaniDev.
La A es un 4.
Como otros grandes usuarios de Twitter.
Como otros grandes usuarios.
Grandes amigos.
Exacto.
Y también de vez en cuando podéis escuchar en el podcast que tenemos, en What the Front.
Ah, sí.
Sí, sí, sí.
Otro gran podcast.
Otro gran podcast.
Bueno, chicos.
Pues muchas gracias por vernos y hasta la próxima.
A cuidarse.