<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: programador51</title>
    <description>The latest articles on DEV Community by programador51 (@programador51).</description>
    <link>https://dev.to/programador51</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F549575%2F8d877829-3068-4f28-a6e1-27ac9eb2fc2f.png</url>
      <title>DEV Community: programador51</title>
      <link>https://dev.to/programador51</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/programador51"/>
    <language>en</language>
    <item>
      <title>Browser Extensions - Native Messaging</title>
      <dc:creator>programador51</dc:creator>
      <pubDate>Sat, 20 Dec 2025 10:46:05 +0000</pubDate>
      <link>https://dev.to/programador51/browser-extensions-native-messaging-21am</link>
      <guid>https://dev.to/programador51/browser-extensions-native-messaging-21am</guid>
      <description>&lt;h2&gt;
  
  
  Objective
&lt;/h2&gt;

&lt;p&gt;Teach users the theory of how to "run" &lt;code&gt;.exe&lt;/code&gt; files with browser extensions.&lt;/p&gt;




&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Browser extensions allow developers to &lt;strong&gt;extend the browser's capabilities&lt;/strong&gt;. For example, they provide more control over downloads. By default, the browser only saves files to the folder set in its configuration or to a location chosen by the user via the file explorer. With background context in an extension, you can &lt;strong&gt;create subfolders, overwrite files, delete files, and more&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;But what if you need &lt;strong&gt;even more control&lt;/strong&gt;? Something that requires the user’s machine for advanced processing—operations that the browser itself cannot perform, like adding or updating metadata in downloaded files.&lt;/p&gt;

&lt;p&gt;Accessing such low-level operations is &lt;strong&gt;blocked by browsers for security reasons&lt;/strong&gt;. Does that mean you must always create a desktop or mobile app? Usually, yes, and that may be the best practice. But if you want to avoid that, there is &lt;strong&gt;one possible option: Native Messaging&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Content
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Browsers &lt;strong&gt;block direct communication with the OS&lt;/strong&gt; and the device to prevent JavaScript-based malware.&lt;/li&gt;
&lt;li&gt;Because of this, tasks like editing metadata on downloaded media cannot be performed directly in the browser.&lt;/li&gt;
&lt;li&gt;However, browsers &lt;strong&gt;can allow you to trigger processes&lt;/strong&gt; that already exist on the user’s machine (like &lt;code&gt;.exe&lt;/code&gt; files) &lt;strong&gt;securely and in the background&lt;/strong&gt;. This is done using &lt;strong&gt;Native Messaging&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;




&lt;h3&gt;
  
  
  Native Messaging
&lt;/h3&gt;

&lt;p&gt;Native Messaging is an &lt;strong&gt;official Chrome mechanism&lt;/strong&gt; that allows a browser extension to securely communicate with a native application (e.g., an &lt;code&gt;.exe&lt;/code&gt; file on Windows). It acts as a &lt;strong&gt;bridge between the browser and the operating system&lt;/strong&gt;, enabling the extension to “talk” to local programs &lt;strong&gt;without violating Chrome’s security rules&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Important points:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You &lt;strong&gt;cannot run native applications that block the flow indefinitely&lt;/strong&gt;, such as processes that require the user to manually select files.&lt;/li&gt;
&lt;li&gt;Processes must be &lt;strong&gt;straightforward and predictable&lt;/strong&gt;, like merging files or converting videos automatically.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Scenario
&lt;/h3&gt;

&lt;p&gt;Imagine "Paco" wants to download videos from Fansly. The API delivers &lt;strong&gt;2-second chunks&lt;/strong&gt; instead of complete videos. Concatenating these chunks creates a playable video, but for an end user, this is &lt;strong&gt;not usable without additional processing&lt;/strong&gt;.&lt;/p&gt;




&lt;h3&gt;
  
  
  Solution
&lt;/h3&gt;

&lt;p&gt;After considering options, a developer might decide on this approach:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create a &lt;strong&gt;browser extension&lt;/strong&gt; that renders buttons to download all media displayed in the Fansly app.&lt;/li&gt;
&lt;li&gt;Use software like &lt;code&gt;ffmpeg&lt;/code&gt; to process media delivered in chunks (e.g., &lt;code&gt;.m3u8&lt;/code&gt; or MDN resources). Paco doesn’t need to know the details—as long as he can play the final video, it works.&lt;/li&gt;
&lt;li&gt;Use &lt;strong&gt;offline tools&lt;/strong&gt; to reduce costs and dependencies. While WebAssembly versions of &lt;code&gt;ffmpeg&lt;/code&gt; exist (&lt;code&gt;ffmpeg.wasm&lt;/code&gt;), browsers have &lt;strong&gt;memory limits&lt;/strong&gt;, and large or parallel downloads (e.g., 4K, 30-minute videos) could crash the window. Using a &lt;code&gt;.exe&lt;/code&gt; file that runs locally is safer and more efficient than creating a server to handle the processing.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Workflow summary:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The extension downloads all chunks in the default Downloads folder.&lt;/li&gt;
&lt;li&gt;A signal is sent via &lt;strong&gt;Native Messaging&lt;/strong&gt; to trigger the executable on the user’s machine.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;.exe&lt;/code&gt; merges and converts the chunks into a final MP4 file, completing the task seamlessly.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Chrome does &lt;strong&gt;not allow direct execution of &lt;code&gt;.exe&lt;/code&gt; files&lt;/strong&gt;, but it offers an &lt;strong&gt;official and secure mechanism&lt;/strong&gt; (Native Messaging) to integrate with native applications when justified. The only caveat is that the &lt;strong&gt;user must install the executable&lt;/strong&gt; or save the files somewhere on their device.&lt;/p&gt;




&lt;p&gt;An extension using this workflow is already online, proving that &lt;strong&gt;desktop or mobile apps can sometimes be skipped&lt;/strong&gt; if there’s no strong justification to create them. Many GitHub projects attempt CLI solutions instead, but using the logged-in browser session &lt;strong&gt;avoids login configuration&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;a href="https://chromewebstore.google.com/detail/fansly-downloader/pemgmimldpfffdfabkjfalkbicfpidpc?utm_source=item-share-cb" rel="noopener noreferrer"&gt;Fansly Downloader&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Download videos and pictures from the content creators you are subscribed to on Fansly.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3s1ewnx3ccbzwtpt5xjo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3s1ewnx3ccbzwtpt5xjo.png" alt=" " width="800" height="159"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Did you know you could run executable files using browser extensions? How does this change your perspective on web development? 😱&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>extensions</category>
      <category>frontend</category>
    </item>
    <item>
      <title>DevOps</title>
      <dc:creator>programador51</dc:creator>
      <pubDate>Wed, 22 May 2024 18:05:34 +0000</pubDate>
      <link>https://dev.to/programador51/devops-4np9</link>
      <guid>https://dev.to/programador51/devops-4np9</guid>
      <description>&lt;h2&gt;
  
  
  Feature
&lt;/h2&gt;

&lt;p&gt;En Scrum, una "feature" (característica) es una funcionalidad o capacidad específica que aporta valor al usuario final. Las features son componentes del Product Backlog y representan partes importantes y diferenciadas del producto que se está desarrollando. Cada feature es suficientemente grande para que tenga un impacto significativo en el producto y, por lo general, se desglosa en historias de usuario más pequeñas para su implementación en Sprints.&lt;/p&gt;

&lt;h3&gt;
  
  
  Ejemplo de Feature y su Desglose
&lt;/h3&gt;

&lt;p&gt;Feature: Gestión de Proyectos&lt;/p&gt;

&lt;p&gt;Descripción: Permitir a los usuarios crear y gestionar proyectos dentro del sistema.&lt;br&gt;
Historias de Usuario Derivadas de la Feature&lt;br&gt;
Historia de Usuario 1: Crear Proyecto&lt;/p&gt;

&lt;p&gt;Descripción: Como usuario, quiero poder crear un nuevo proyecto para poder gestionar mis tareas.&lt;/p&gt;

&lt;p&gt;Criterios de Aceptación:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;El formulario de creación de proyectos debe incluir campos para el nombre del proyecto, la descripción, la fecha de inicio y la fecha de finalización.&lt;/li&gt;
&lt;li&gt;Al guardar, el proyecto debe ser visible en la lista de proyectos del usuario.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ¿Qué es un Backlog?
&lt;/h2&gt;

&lt;p&gt;Un backlog es una lista priorizada de tareas pendientes, requisitos y características que un equipo de desarrollo debe completar para alcanzar los objetivos de un proyecto. En el contexto de Scrum, existen dos tipos principales de backlogs:&lt;/p&gt;

&lt;p&gt;Supongamos que estamos desarrollando un sistema de gestión de proyectos que incluye la creación de proyectos, la generación de órdenes de compra y remisiones, y la gestión de materiales comprados. Aquí tienes un ejemplo de cómo podría verse el Product Backlog para este proyecto:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Prioridad&lt;/th&gt;
&lt;th&gt;ID&lt;/th&gt;
&lt;th&gt;Descripción&lt;/th&gt;
&lt;th&gt;Estimación (Puntos de Historia)&lt;/th&gt;
&lt;th&gt;Estado&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;P-01&lt;/td&gt;
&lt;td&gt;Crear entidad y relaciones en el diagrama ER para la gestión de proyectos&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;To Do&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;P-02&lt;/td&gt;
&lt;td&gt;Diseñar pantalla de creación de proyectos&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;To Do&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;P-03&lt;/td&gt;
&lt;td&gt;Implementar backend para almacenar nuevos proyectos&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;To Do&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;P-04&lt;/td&gt;
&lt;td&gt;Validar datos del formulario de creación de proyectos&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;To Do&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;P-05&lt;/td&gt;
&lt;td&gt;Crear pruebas unitarias para la lógica de creación de proyectos&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;To Do&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;P-06&lt;/td&gt;
&lt;td&gt;Crear entidad y relaciones en el diagrama ER para órdenes de compra&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;To Do&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;P-07&lt;/td&gt;
&lt;td&gt;Diseñar pantalla de generación de órdenes de compra&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;To Do&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;P-08&lt;/td&gt;
&lt;td&gt;Implementar backend para generar nuevas órdenes de compra&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;To Do&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;P-09&lt;/td&gt;
&lt;td&gt;Crear pruebas unitarias para la lógica de órdenes de compra&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;To Do&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;P-10&lt;/td&gt;
&lt;td&gt;Crear API para la gestión de remisiones&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;To Do&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;P-11&lt;/td&gt;
&lt;td&gt;Diseñar pantalla de gestión de remisiones&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;To Do&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;P-12&lt;/td&gt;
&lt;td&gt;Crear entidad y relaciones en el diagrama ER para la gestión de materiales&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;To Do&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;13&lt;/td&gt;
&lt;td&gt;P-13&lt;/td&gt;
&lt;td&gt;Diseñar pantalla de gestión de materiales&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;To Do&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;14&lt;/td&gt;
&lt;td&gt;P-14&lt;/td&gt;
&lt;td&gt;Implementar backend para el seguimiento de materiales comprados&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;To Do&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;15&lt;/td&gt;
&lt;td&gt;P-15&lt;/td&gt;
&lt;td&gt;Crear pruebas unitarias para la lógica de gestión de materiales&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;To Do&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;td&gt;P-16&lt;/td&gt;
&lt;td&gt;Integración de todos los módulos&lt;/td&gt;
&lt;td&gt;13&lt;/td&gt;
&lt;td&gt;To Do&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;17&lt;/td&gt;
&lt;td&gt;P-17&lt;/td&gt;
&lt;td&gt;Pruebas integrales de todo el sistema&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;To Do&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;18&lt;/td&gt;
&lt;td&gt;P-18&lt;/td&gt;
&lt;td&gt;Documentación técnica del sistema&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;To Do&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;19&lt;/td&gt;
&lt;td&gt;P-19&lt;/td&gt;
&lt;td&gt;Documentación de usuario&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;To Do&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;20&lt;/td&gt;
&lt;td&gt;P-20&lt;/td&gt;
&lt;td&gt;Capacitación y entrega a los usuarios finales&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;To Do&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  ¿Qué son las tareas?
&lt;/h2&gt;

&lt;p&gt;Actividades específicas y desglosadas que el equipo de desarrollo debe completar para cumplir con los ítems del Product Backlog seleccionados para ese Sprint. Estas tareas son más pequeñas y detalladas que los ítems del Product Backlog y son gestionadas en el Sprint Backlog.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>React - useRef</title>
      <dc:creator>programador51</dc:creator>
      <pubDate>Tue, 26 Sep 2023 17:58:03 +0000</pubDate>
      <link>https://dev.to/programador51/react-useref-3den</link>
      <guid>https://dev.to/programador51/react-useref-3den</guid>
      <description>&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Objective&lt;/li&gt;
&lt;li&gt;Understand what &lt;code&gt;useRef&lt;/code&gt; does&lt;/li&gt;
&lt;li&gt;Example with &lt;code&gt;Rendering List&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Example with &lt;code&gt;HTML Dialog Element&lt;/code&gt; (Modal)&lt;/li&gt;
&lt;li&gt;Recommended readings&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;&lt;span id="1"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Objective
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Understand the &lt;code&gt;userRef&lt;/code&gt;&lt;/strong&gt; hook and &lt;strong&gt;use it on a example&lt;/strong&gt; to put knowledge on practice. And share my experience with other people.&lt;/p&gt;

&lt;p&gt;I'll organize each point of this post with bullets, so you can follow what's my purpose as you read each point.&lt;/p&gt;




&lt;p&gt;&lt;span id="2"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Understand what &lt;code&gt;useRef&lt;/code&gt; does&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;First, I would like that you read the docs of this topic &lt;a href="https://react.dev/reference/react/useRef#" rel="noopener noreferrer"&gt;here&lt;/a&gt;, but, in a few words (and with my understanding of the read)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;a)&lt;/strong&gt; &lt;code&gt;useRef&lt;/code&gt; stores a &lt;code&gt;variable&lt;/code&gt; that do not follows the re-rendering of the app, meaning that his value won't change until you actually do it manually (in a &lt;code&gt;useEffect&lt;/code&gt; , on a function execution, etc), &lt;strong&gt;is not recommended to save information that relies on other &lt;code&gt;states&lt;/code&gt; to apply business logic&lt;/strong&gt; since his value will reamin static on each render&lt;br&gt;
&lt;strong&gt;b)&lt;/strong&gt; &lt;code&gt;useRef&lt;/code&gt; can be link to a DOM element of the UI which returns a &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/Element" rel="noopener noreferrer"&gt;Element&lt;/a&gt; that allows access to their methods and properties&lt;/p&gt;




&lt;p&gt;&lt;span id="3"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Example with &lt;strong&gt;case A&lt;/strong&gt; (Rendering list)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Problem&lt;/strong&gt;: When rendering a list of items on react, a unique value is needed, more about this on the &lt;a href="https://react.dev/learn/rendering-lists" rel="noopener noreferrer"&gt;link&lt;/a&gt;. However, what the docs tell you is that this unique value &lt;strong&gt;needs to be &lt;code&gt;static&lt;/code&gt;&lt;/strong&gt; AND mustn't be created while rendering. React recommends this &lt;a href="https://react.dev/learn/rendering-lists#where-to-get-your-key" rel="noopener noreferrer"&gt;solution&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'm gonna explain more with this example and why this is important.&lt;/p&gt;

&lt;p&gt;Libraries like &lt;a href="https://www.npmjs.com/package/react-sortablejs" rel="noopener noreferrer"&gt;react-sortablejs&lt;/a&gt; needs an id on the children elements that will have the sortable behavior. But, if you apply the react solution using native solutions like &lt;code&gt;window.crypto.randomUUID()&lt;/code&gt; you may have the issue that when you do something on the app (drag and drop for example) the entire app will re-render (that's how react works) and will change the &lt;code&gt;key&lt;/code&gt; of your &lt;code&gt;rendering-lists&lt;/code&gt; since the the crypto function is gonna execute over and over because it's a function execution, the &lt;code&gt;Virtual Dom&lt;/code&gt; will make that the drag and drop resets&lt;/p&gt;

&lt;h3&gt;
  
  
  Solution
&lt;/h3&gt;

&lt;p&gt;1) Execute the &lt;code&gt;crypto&lt;/code&gt; function on the useEffect that fetches your &lt;code&gt;rendering-list&lt;/code&gt;. (avoiding create keys while rendering)&lt;/p&gt;

&lt;p&gt;I don't do this because having a &lt;code&gt;key&lt;/code&gt;property makes noice (at least to me) on the properties of the object, like, what does it means &lt;code&gt;key&lt;/code&gt;, what's his purpose on this?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzt7jt7fwn12f85y8funm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzt7jt7fwn12f85y8funm.png" alt="code_example"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I refuse to do this, but it works&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn62y4iq6ikfcos7tm6f0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn62y4iq6ikfcos7tm6f0.png" alt="code_example"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And, if you want to avoid add the &lt;code&gt;key&lt;/code&gt; property on the &lt;code&gt;useEffect&lt;/code&gt; executing the function on the key property for rendering list, you're wrong&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo1h1bot7ccvbxrgkue1r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo1h1bot7ccvbxrgkue1r.png" alt="code_example"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Solution
&lt;/h3&gt;

&lt;p&gt;2) Another aproach is using &lt;code&gt;useRef&lt;/code&gt; to avoid having a &lt;code&gt;key&lt;/code&gt; property on my object. So I can keep more &lt;code&gt;cleaner&lt;/code&gt; my object with only the information that's needed.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fawq193tjio6d7y7z37ci.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fawq193tjio6d7y7z37ci.png" alt="code_example"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;span id="4"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Example with &lt;strong&gt;case B&lt;/strong&gt; (Manipulate DOM to create a modal)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Problem&lt;/strong&gt;: When creating a modal in react there's some considerations in order to create it, like:&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Must overlap all the elements behind, being on the top of the top&lt;/li&gt;
&lt;li&gt;Must be set on a position (normally on the center on the screen or full screen for mobile)&lt;/li&gt;
&lt;li&gt;Configure some accesibility like &lt;code&gt;Esc&lt;/code&gt; key to exit modal&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Solution
&lt;/h3&gt;

&lt;p&gt;1) To avoid an overhead programming all those features from scratch   or using frameworks like bootstrap. It's time to use the &lt;a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dialog" rel="noopener noreferrer"&gt;dialog&lt;/a&gt; html element and &lt;code&gt;useRef&lt;/code&gt; to manipulate the element on the DOM.&lt;/p&gt;

&lt;p&gt;First of all, create a hook to manipulate the &lt;code&gt;dialog&lt;/code&gt; element thorught the DOM&lt;/p&gt;

&lt;p&gt;&lt;code&gt;useDialog/index.ts&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsu6xvk747k369l6npgjz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsu6xvk747k369l6npgjz.png" alt="code_example"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Then, the hook can be used to create modal withouht any struggle&lt;/p&gt;

&lt;p&gt;&lt;code&gt;App.tsx&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F33f68qp6f6gf1ylmr012.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F33f68qp6f6gf1ylmr012.png" alt="code_example"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A &lt;code&gt;Dialog&lt;/code&gt; component can be created to set css styles, a footer, header, body, responsive design, etc. Also, the hook can be used apart from the &lt;code&gt;Dialog&lt;/code&gt; component that can be created in order to click any html element to open the modal, even programitically. In this way, to manipulate the modal is not hook to a button on the UI.&lt;/p&gt;

&lt;p&gt;This HTML Element has a 92% of support on the most important browsers. &lt;a href="https://caniuse.com/dialog" rel="noopener noreferrer"&gt;Compatibility here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Something to take care, is that this dom element ignores de &lt;code&gt;z-index&lt;/code&gt; on css. Meaning, if you have elements that depends on that property, it won't work inside the dialog.&lt;/p&gt;




&lt;p&gt;The codes are pretty simple, but of course using &lt;code&gt;HOC&lt;/code&gt; and splitting the code into custom hooks or smaller components are recommended in case that the example need to be completed for real purposes. I recommend the following links to know more about these topics that are needed for complete codes&lt;/p&gt;

&lt;p&gt;&lt;span id="5"&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Recommended readings
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://es.react.dev/reference/react/forwardRef" rel="noopener noreferrer"&gt;forwardRef&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/almonteluis/mastering-higher-order-components-in-react-js-a-comprehensive-guide-oh7"&gt;HOC&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>react</category>
      <category>webdev</category>
      <category>javascript</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>MySQL - Paginar datos</title>
      <dc:creator>programador51</dc:creator>
      <pubDate>Mon, 15 Nov 2021 23:11:06 +0000</pubDate>
      <link>https://dev.to/programador51/mysql-paginar-datos-gof</link>
      <guid>https://dev.to/programador51/mysql-paginar-datos-gof</guid>
      <description>&lt;p&gt;&lt;strong&gt;Objetivo&lt;/strong&gt;: Obtener los resultados de forma "paginada" en MySQL, de tal forma que se pueda implementar en una interfaz a la siguiente al entregar los datos mediante una petición GET al cliente&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--SiBXsFNl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/oftqr9xg8gtwl95eoza0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SiBXsFNl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/oftqr9xg8gtwl95eoza0.png" alt="table_example_ui" width="880" height="504"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;El caso de uso se puede encontrar en el demo de una aplicacion que desarrolle, &lt;strong&gt;&lt;a href="https://xenodochial-curie-9f76f0.netlify.app/todo"&gt;To Do 51&lt;/a&gt;&lt;/strong&gt; (Aguarda un momento mientras carga la BD 😅)&lt;/p&gt;
&lt;h2&gt;
  
  
  Base de datos
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;¿Cómo obtener los datos paginados?&lt;/strong&gt;&lt;br&gt;
Obteniendo el rango de &lt;code&gt;inicio&lt;/code&gt; &amp;amp; &lt;code&gt;fin&lt;/code&gt; para después ejecutar la consulta con ese rango.&lt;br&gt;
Lo ideal, seria que el lenguaje de programación backend ejecute un &lt;code&gt;stored procedure&lt;/code&gt; donde solo deba llamar el método junto con 2 argumentos. Algo como lo siguiente: &lt;/p&gt;

&lt;p&gt;&lt;code&gt;CALL v1_GetTasksPaginated(1,2)&lt;/code&gt;   &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qfqbfi8a--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dtpx828f0i9at98alean.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qfqbfi8a--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dtpx828f0i9at98alean.png" alt="stored_procedure_get_task_paginated" width="681" height="293"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Donde:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;apiPage&lt;/strong&gt;: Es la pagina que se desea obtener de todo el conjunto de datos. Algunas REST API piden como parametro este argumento. Por ejemplo el siguiente enlace: &lt;code&gt;https://reqres.in/api/users?page=2&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;apiLimitRows&lt;/strong&gt;: Este parametro es para indicar cuantos registros se desean obtener por cada paginado. Lo normal seria que que el lenguaje backend tenga este valor en una &lt;code&gt;variable de entorno&lt;/code&gt; y siempre usase este parametro para llamar el stored procedure. Algunas REST API permiten que el cliente decida hasta cuantos registros obtener, pero por seguridad el backend deberia limitarlo a uno fijo (o el propio stored procedure).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Para lograr el cometido, se utilizan 3 stored procedures&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--sRcPNjFm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gu0l4njrojm141yb02uh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--sRcPNjFm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gu0l4njrojm141yb02uh.png" alt="sp_used" width="648" height="117"&gt;&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;v1_GetTasksPaginated(?,?)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Query:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;
&lt;span class="k"&gt;BEGIN&lt;/span&gt;

    &lt;span class="k"&gt;CALL&lt;/span&gt; &lt;span class="n"&gt;v1_GetTasksPagination&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;apiPage&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;apiLimitRows&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="k"&gt;CALL&lt;/span&gt; &lt;span class="n"&gt;v1_GetTasks&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;startRow&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;rowsPerPage&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;END&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;El stored procedure consta de dos pasos para obtener la información paginada. &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Obtener el numero de registros y calcular el rango a seleccionar acorde a la pagina solicitad&lt;/li&gt;
&lt;li&gt;Obtener los registros con el rango calculado&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Pero este en particular servirá indicar la pagina y cuantos registros obtener a partir de ella. Es la que se usara por el programador backend para evitar que el se encargue de esta funcionalidad y delegarlo a implementar el JWT, conexión con BD, azure de microsoft, validación del DTO, etc.&lt;/p&gt;

&lt;p&gt;Tan sencillo como ejecutarlo de esta manera&lt;/p&gt;

&lt;p&gt;&lt;code&gt;CALL v1_GetTasksPaginated(1,2)&lt;/code&gt;   &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qfqbfi8a--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dtpx828f0i9at98alean.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qfqbfi8a--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dtpx828f0i9at98alean.png" alt="stored_procedure_get_task_paginated" width="681" height="293"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Dando como resultado lo siguiente:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--dDwfZQzZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1pj7kfm6r2bc30k0gcw6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dDwfZQzZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1pj7kfm6r2bc30k0gcw6.png" alt="query_result" width="499" height="372"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Listo para manipularlo en el backend y enviar la respuesta al cliente 😁 &lt;/p&gt;




&lt;p&gt;&lt;strong&gt;v1_GetTasksPagination(?,?)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Este es el encargado de calcular&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;OFFSET&lt;/li&gt;
&lt;li&gt;ROW_COUNT&lt;/li&gt;
&lt;li&gt;TOTAL_PAGES (opcional pero lo recomiendo para implementar el 1-2 paginas, 1-5 paginas, etc)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Los cuales serán utilizados en el query que obtiene los datos.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;@rows&lt;/strong&gt;: Aquí se debe obtener cuantos registros existen en dicha tabla aplicando los filtros necesarios si es requerido. Por ejemplo, en mi caso, solo cuento los registros donde su borrado logico es 0 (falso).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;@rowsPerPage&lt;/strong&gt;: Con este nos guiamos en cuantos registros deben existir por pagina. Servirá para un calculo posterior. (Es un input del stored procedure)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;@startRow&lt;/strong&gt;: Esta operación matemática permitirá saber desde que registro &lt;code&gt;n&lt;/code&gt; empezar a obtener los resultados. (El &lt;code&gt;offset&lt;/code&gt; de &lt;code&gt;LIMIT&lt;/code&gt;)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;@totalPages&lt;/strong&gt;: Para obtener el numero de paginas total de los registros, se hace un división de &lt;code&gt;@rows/@rowsPerPage&lt;/code&gt; y se redondea su resultado para evitar tener paginas con decimales. No es necesario, pero puede servir para enterarnos cuantas paginas existen.&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;
&lt;span class="k"&gt;BEGIN&lt;/span&gt;
    &lt;span class="c1"&gt;-- Recuerda este filtro para mas al rato&lt;/span&gt;
    &lt;span class="k"&gt;SET&lt;/span&gt;
        &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="k"&gt;rows&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="k"&gt;SELECT&lt;/span&gt;
            &lt;span class="k"&gt;COUNT&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;noTasks&lt;/span&gt;
        &lt;span class="k"&gt;FROM&lt;/span&gt;
            &lt;span class="n"&gt;tasks&lt;/span&gt;
        &lt;span class="k"&gt;WHERE&lt;/span&gt;
            &lt;span class="n"&gt;userId&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="k"&gt;AND&lt;/span&gt; &lt;span class="n"&gt;logicalErase&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
    &lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;SET&lt;/span&gt;
        &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;rowsPerPage&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="k"&gt;SELECT&lt;/span&gt;
        &lt;span class="n"&gt;apiNoRows&lt;/span&gt;
    &lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;SET&lt;/span&gt;
        &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;startRow&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="k"&gt;SELECT&lt;/span&gt;
            &lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;apiPage&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;rowsPerPage&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;SET&lt;/span&gt;
        &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;totalPages&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="k"&gt;SELECT&lt;/span&gt;
            &lt;span class="n"&gt;CEIL&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="k"&gt;rows&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;rowsPerPage&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;END&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;&lt;strong&gt;v1_GetTasks(?,?)&lt;/strong&gt;&lt;br&gt;
Este es el query encargado de obtener los datos de la tabla deseada. No se puso en un mismo stored procedure debido a que la clausula &lt;code&gt;LIMIT&lt;/code&gt; no permite utilizar variables. Así que se brindan como argumentos del stored procedure para lograr la tarea.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;
&lt;span class="k"&gt;BEGIN&lt;/span&gt;

&lt;span class="k"&gt;SELECT&lt;/span&gt; 
        &lt;span class="n"&gt;Tasks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;Tasks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;description&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;Tasks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;createdDate&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;createdDate&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;Tasks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completed&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;completed&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;Tasks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;userId&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;userId&lt;/span&gt;

        &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;Tasks&lt;/span&gt;

        &lt;span class="c1"&gt;-- El "filtro" del WHERE debe ser el mismo que el query&lt;/span&gt;
        &lt;span class="c1"&gt;-- que cuenta los registros de la tabla para coincidir resultados&lt;/span&gt;

        &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;Tasks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;userId&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;

        &lt;span class="k"&gt;AND&lt;/span&gt; &lt;span class="n"&gt;Tasks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;logicalErase&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;

        &lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;Tasks&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;createdDate&lt;/span&gt; &lt;span class="k"&gt;DESC&lt;/span&gt;

        &lt;span class="k"&gt;LIMIT&lt;/span&gt; &lt;span class="n"&gt;apiBegin&lt;/span&gt; &lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;apiNextOnes&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;totalPages&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;totalPages&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;END&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;Adjunto el .sql para quien desee importar la base de datos e intentarlo en carne propia el funcionamiento.&lt;br&gt;
Descarga &lt;strong&gt;&lt;a href="https://anonfiles.com/t5k7teVaub/todofime_sql"&gt;aqui&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;En cualquier caso, se puede devolver al cliente un JSON con una estructura de este tipo para que sea capaz de pintar la interfaz sin tanto problema.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"data"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"tasks"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;81&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Seleccione una fila ;)"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="nl"&gt;"createdDate"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2021-10-23T05:20:57.000Z"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="nl"&gt;"completed"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="nl"&gt;"userId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Aprobar la materia :("&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="nl"&gt;"createdDate"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2021-10-23T05:20:22.000Z"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="nl"&gt;"completed"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="nl"&gt;"userId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"pages"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"actualPage"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"errors"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;¿Quieres saber mas de mi? Te invito a revisar mi &lt;a href="https://silly-ritchie-eec7bf.netlify.app/"&gt;portafolio&lt;/a&gt; 😁&lt;/p&gt;

</description>
      <category>mysql</category>
      <category>database</category>
      <category>webdev</category>
      <category>spanish</category>
    </item>
    <item>
      <title>Try js-smart-table!!</title>
      <dc:creator>programador51</dc:creator>
      <pubDate>Tue, 29 Jun 2021 15:05:18 +0000</pubDate>
      <link>https://dev.to/programador51/try-js-smart-table-25ki</link>
      <guid>https://dev.to/programador51/try-js-smart-table-25ki</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--BfsYmpxB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.cloudinary.com/dmtvwe2ur/image/upload/v1624817824/js-smart-table/JS-Smart-table_m0lb4u.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--BfsYmpxB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.cloudinary.com/dmtvwe2ur/image/upload/v1624817824/js-smart-table/JS-Smart-table_m0lb4u.jpg" alt="cover"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hi everyone, today i present you the first library i've created for javascript (front-end/client-side).&lt;/p&gt;

&lt;p&gt;Ill give you &lt;strong&gt;&lt;a href="https://youthful-hopper-033b16.netlify.app/"&gt;this link&lt;/a&gt;&lt;/strong&gt; in order to try the demo by yourself.&lt;/p&gt;

&lt;p&gt;Basically, tabulates date from an API using javascript and prints it on the browser. Something like this.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--rSo8_j1g--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/31brdwigocdbk1pd7jnq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rSo8_j1g--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/31brdwigocdbk1pd7jnq.png" alt="example_library"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What's the interesting of this? &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Allows you click on the column and sort the data (sorted by the sql motor that use the API)&lt;/li&gt;
&lt;li&gt;Gives you a pagination of the data&lt;/li&gt;
&lt;li&gt;Allows you click on the rows and "save on memory" the information (an object with the information of that row). This allows you make another operations (callback) using as reference the data clicked. For instance. You clicked a row and you want to fill a form with that? You can do it! Request to another API? Yeah too. Actually you can do anything.&lt;/li&gt;
&lt;li&gt;Vanilla JS. You can use it anywhere (i'm using it right now on React and Vanilla projects) or any library/framework of JS.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I hope this can help you when trying to implement this kind of features on your projects. All it's documented,video and with example codes in order to make it understandable for the community.&lt;/p&gt;

&lt;p&gt;Cheers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://www.npmjs.com/package/js-smart-table"&gt;NPM LIBRARY HERE&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>frontend</category>
      <category>vanillajs</category>
    </item>
    <item>
      <title>React.js - useReducer</title>
      <dc:creator>programador51</dc:creator>
      <pubDate>Wed, 03 Feb 2021 18:32:51 +0000</pubDate>
      <link>https://dev.to/programador51/react-js-usereducer-5abp</link>
      <guid>https://dev.to/programador51/react-js-usereducer-5abp</guid>
      <description>&lt;p&gt;&lt;strong&gt;Nota&lt;/strong&gt;: Entrada para quienes no hayan tocado una sola linea de codigo/teoria de lo que hace el hook useReducer&lt;/p&gt;

&lt;h2&gt;
  
  
  useReducer?
&lt;/h2&gt;

&lt;p&gt;Este hook guarda y manipula el estado de los componentes, asi es, hace "lo mismo" que &lt;code&gt;useState&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;La diferencia? &lt;code&gt;useReducer&lt;/code&gt; permite manipular los estados de manera global en la aplicacion y relacionar los estados para que se relacionen entre si, para que puedan reaccionar dependiendo del cambio de uno u otro estado del sistema entero. Cosa que no se puede hacer con &lt;code&gt;useState&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Cuando usarlo?
&lt;/h3&gt;

&lt;p&gt;Si el proyecto es muy grande, &lt;code&gt;useReducer&lt;/code&gt;. No es el hecho de tener un proyecto "grande", si no que al momento de codificar los requerimientos, posiblemente tengas muchos estados en los componentes (y no esta mal), el problema seria tener estados independientes el uno del otro (&lt;code&gt;useState&lt;/code&gt;) cuando en realidad trabajan en conjunto para realizar x o y accion en el sistema (como mostrar una pantalla en especifico). En ese caso caso es muy conveniente &lt;code&gt;useReducer&lt;/code&gt;. Si no es el caso, se puede utilizar con toda libertad el hook basico de &lt;code&gt;useState&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Para la parte practica con codigo. Platzi tiene una entrada que explica perfectamente como utilizar useReducer y un contraste de hacer el codigo usando useState, para ver esas diferencias a nivel de desarrollo que nos abren los ojos para decidir cual usar, recordar que estos hooks son complementos y no un reemplazo.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fm54ygi73c7is6717tkd9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fm54ygi73c7is6717tkd9.png" alt="Captura de pantalla 2021-02-03 123041"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://platzi.com/blog/usestate-vs-usereducer/" rel="noopener noreferrer"&gt;useState vs useReducer&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Video a manera de recurso y practica visual&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.youtube.com/watch?v=MqA3cwueF24" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Fimg.youtube.com%2Fvi%2FMqA3cwueF24%2F0.jpg" alt="useReducer Tutorial"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A manera resumida, el codigo para utilizar useReducer consiste en los siguientes 3 puntos.&lt;/p&gt;




&lt;h2&gt;
  
  
  1 - importar el hook al componente
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;dispatch&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useReducer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;reducer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;count&lt;/code&gt;: la variable, nuestro estado&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;dispatch&lt;/code&gt;: es un metodo que recibe como parametro la accion que queremos ejecutar para modificar ese state.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Por ejemplo, para &lt;code&gt;count&lt;/code&gt; podemos tener varias acciones, incrementar, decrementar, etc. Ya depende de nosotros que hacer para hacer ese cambio de estado segun nuestro criterio.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;useReducer&lt;/code&gt;: es una funcion, esta recibe dos parametros.&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;El nombre de la funcion que contiene (despacha) los distintos metodos que alteran nuestro estado de una u otra manera&lt;/li&gt;
&lt;li&gt;Es el estado inicial de nuestro estado.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  2 - La funcion reducer
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;reducer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;action&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
 &lt;span class="k"&gt;switch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;action&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
  &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;increment&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
  &lt;span class="cm"&gt;/* blablabla */&lt;/span&gt; 
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="o"&gt;+=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 

  &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;decrement&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
  &lt;span class="cm"&gt;/* blablabla */&lt;/span&gt; 
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="o"&gt;-=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 
 &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Este codigo se almacena en un archivo js distinto a los componentes, la finalidad es poder reutilizarlo en cualquier otro componente.&lt;/p&gt;

&lt;p&gt;La funcion recibe 2 parametros.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;state&lt;/code&gt;: El estado inicial&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;action&lt;/code&gt;: Un objeto. Este objeto contiene los metodos despachadores que se puede ejecutar para alterar el estado&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Dentro de la funcion se encuentra un switch del objeto recibido como 2do parametro. Esto ayudara a ejecutar las acciones pertinentes para mutar el estado.&lt;/p&gt;

&lt;h2&gt;
  
  
  3 usar el hook en el componente
&lt;/h2&gt;

&lt;p&gt;Una vez realizados los puntos 1 &amp;amp; 2, es momento de usarlo en el jsx. (O donde deses)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt; &lt;span class="nx"&gt;onClick&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{()&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nf"&gt;dispatch&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;increment&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;})}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/button&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;El metodo dispatch (al que se hizo array destructuring) se ejecuta al momento de que suceda algun evento dentro del DOM. Este metodo recibe como parametro un objeto con la propiedad &lt;code&gt;type&lt;/code&gt; que indica cual sera el codigo a ejecutar para mutar el estado.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Reacts.js - Router</title>
      <dc:creator>programador51</dc:creator>
      <pubDate>Tue, 02 Feb 2021 16:01:32 +0000</pubDate>
      <link>https://dev.to/programador51/reacts-js-router-kcb</link>
      <guid>https://dev.to/programador51/reacts-js-router-kcb</guid>
      <description>&lt;p&gt;Antes de explicar que es router y apoyarme de algunos recursos que encontre en internet, me gustaria aterrizar en algo antes de iniciar el tema para comprender mejor este concepto de Router.&lt;/p&gt;

&lt;h3&gt;
  
  
  SPA
&lt;/h3&gt;

&lt;p&gt;En resumen, una SPA carga todos los assets necesarios una sola vez para mostrar el sitio web, de esta forma, al navegar entre pantallas el navegador no se ve en la necesidad de recargar la pagina para mostrar esa "nueva pantalla" con su informacion e interfaz correspondiente. Las web tradicionales (por aquella epoca de los 2000) difieren mucho de las SPA.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kskXq-WL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://juanda.gitbooks.io/webapps/content/spa/spa-vs-traditional-arquitecture.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kskXq-WL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://juanda.gitbooks.io/webapps/content/spa/spa-vs-traditional-arquitecture.jpg" alt="SPA vs Web tradicional"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Esto nos brinda una experiencia mas similar a si estuvieramos en una aplicacion de escritorio o movil.&lt;br&gt;
De hecho, hay mucho por que hablar acerca de este tema. Pero seria muy extenso y fuera de contexto hablar de ese tema al 100% en esta entrada. (Dejo como referencia el siguiente enlace con muy buena informacion acerca de este tema)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://juanda.gitbooks.io/webapps/content/spa/arquitectura_de_un_spa.html"&gt;Arquitectura de un SPA · Desarrollo de aplicaciones web. (NA). dev.to.&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;El punto de mencionar a las SPA es, si renderizan todos los assets de una sola vez, para no tener que hacer refresh del navegador. &lt;/p&gt;

&lt;p&gt;Como sabe el navegador que pantallas e informacion mostrar si la aplicacion web cargo toda la informacion de golpe?&lt;/p&gt;

&lt;p&gt;Bueno, a travez de las ruta url del navegador de internet.&lt;/p&gt;

&lt;p&gt;Un sencillo ejemplo de esto es la nueva version de facebook. Cuando ingresas por la aplicacion web, el navegador carga una sola vez,y de ahi, no importa a donde navegues, la pagina nunca se refresca. Y, para diferenciar las distintas pantallas de la app, se utiliza la url. Para entrar a algun perfil por ejemplo&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.facebook.com/juanchitoperez/"&gt;https://www.facebook.com/juanchitoperez/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Con esa direccion uno puede entrar directamente al perfil de Juan, sin tener que hacer la navegacion inicial para llegar hasta ahi.&lt;/p&gt;

&lt;p&gt;Para poner un ejemplo practico, anexo este video que se pone manos a la obra con codigo para implementar rutas en un proyecto de React.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.youtube.com/watch?v=pp2ZmjTBB5M"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fNwhdaKx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/http://img.youtube.com/vi/pp2ZmjTBB5M/0.jpg" alt="React.js Router"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;No esta de mas mencionar, que la direccion URL del navegador no solo sirve para indicarle a React que componentes mostrar en pantalla, si no que tambien sirve para obtener informacion de una API en formato JSON (nuestra base de datos).&lt;/p&gt;

&lt;p&gt;Hay mucho de que hablar acerca de &lt;code&gt;React Router&lt;/code&gt;, como se implementa, que parametros lleva esta libreria, etc. &lt;/p&gt;

&lt;p&gt;Solo, por poner una demostracion corta. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1) Instalar la libreria&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm install react-router-dom&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Una vez con la libreria (y un proyecto iniciado, aunque sea en blanco)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2)&lt;/strong&gt; Se deben importar a la "App" todas las vistas del sistema. Junto con algunas funciones de la libreria que se descargo&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;BrowserRouter&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;Router&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;Switch&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;Route&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react-router-dom&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//Es un hecho esta importacion&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Login&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./components/auth/Login&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;NuevaCuenta&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./components/auth/NuevaCuenta&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Proyectos&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./components/proyectos/Proyectos&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Una vez importadas todas las pantallas.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3)&lt;/strong&gt; En la funcion de la App, dentro del return, se maneja una sintaxis y esquema como el siguiente&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;App&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Router&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Switch&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Route&lt;/span&gt; &lt;span class="na"&gt;exact&lt;/span&gt; &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"/"&lt;/span&gt; &lt;span class="na"&gt;component&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;Login&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Route&lt;/span&gt; &lt;span class="na"&gt;exact&lt;/span&gt; &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"/nueva-cuenta"&lt;/span&gt; &lt;span class="na"&gt;component&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;NuevaCuenta&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Route&lt;/span&gt; &lt;span class="na"&gt;exact&lt;/span&gt; &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"/proyectos"&lt;/span&gt; &lt;span class="na"&gt;component&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;Proyectos&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Switch&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Router&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;De esa manera, al navegar entre cada url, se mostrara la pantalla correspondiente, asi como tambien la solicitud a la base de datos (si es que esta programada y configurada).&lt;/p&gt;

&lt;p&gt;Hay mucho mas por hablar (acerca del codigo), por esa misma razon, recomiendo ver el video que anexe unos parrafos arriba, ya que todo se aprende mediante practica y un tanto de lectura.&lt;/p&gt;

&lt;p&gt;En la &lt;strong&gt;&lt;a href="https://reactrouter.com/web/guides/quick-start"&gt;documentacion&lt;/a&gt;&lt;/strong&gt; hay mas informacion acerca de esto, incluso guias de como se utiliza, de forma muy detallada.&lt;/p&gt;

&lt;p&gt;Con esta pequena lectura te llevas...&lt;/p&gt;




&lt;ul&gt;
&lt;li&gt;Que es Router en React.js ? &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Es practicamente una forma de "enrutar" los dominios y subdominios de la aplicacion web para indicarle a react que informacion y componentes traer al escuchar cierta direccion.&lt;/p&gt;




&lt;ul&gt;
&lt;li&gt;Para que se utiliza Router?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;En terminos simples, para "desmenusar" la aplicacion en diferentes pantallas/vistas. Por ejemplo, una pantalla de log in, una pantalla de registro, un panel exclusivo para usuarios autenticados, etc.&lt;/p&gt;

&lt;p&gt;El resto, es practica con codigo ;)&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>spanish</category>
      <category>react</category>
      <category>webdev</category>
    </item>
    <item>
      <title>React.js - Conceptos básicos para empezar</title>
      <dc:creator>programador51</dc:creator>
      <pubDate>Sat, 23 Jan 2021 15:42:44 +0000</pubDate>
      <link>https://dev.to/programador51/react-js-conceptos-basicos-para-empezar-lm</link>
      <guid>https://dev.to/programador51/react-js-conceptos-basicos-para-empezar-lm</guid>
      <description>&lt;h4&gt;
  
  
  Extensiones recomendadas para VS Code al momento de trabajar esta librería
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Bracket Pair Colorizer&lt;/li&gt;
&lt;li&gt;ES7 React/Redux/GraphQL/React-Native snippets&lt;/li&gt;
&lt;li&gt;Simple React Snippets&lt;/li&gt;
&lt;li&gt;React/Redux/react-router Snippets&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Contexto
&lt;/h2&gt;

&lt;p&gt;Antes de iniciar a codear, hay algunos conceptos que debes conocer antes de empezar, no se trata de javascript esta entrada, (almenos no tanto) si no de conceptos que yo recomiendo conocer y haber practicado de alguna forma&lt;/p&gt;

&lt;p&gt;1) &lt;strong&gt;Administrador de paquetes&lt;/strong&gt; : Es una forma que nos administra el código de otros desarrolladores de forma muy sencilla. Haciendo la implementación de funcionalidades (de otros programadores) mucho más sencillo.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ejemplo&lt;/strong&gt;: Tu tarea es hacer una app web que pueda convertir un html a pdf. Obviamente no lo harás desde cero, porque posiblemente alguien (antes que tu) ya lo hizo, así que tomas su código para hacer la tarea encomendada. Tienes dos caminos.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Sin administrador&lt;/th&gt;
&lt;th&gt;Con administrador&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1. Buscar la funcionalidad en un lugar como github &lt;br&gt; 2. Analizar el código y extraer lo de nuestro interes &lt;br&gt; 3. Descargar el código que depende esta funcionlidad (si la hay) &lt;br&gt; 4. Repetir del paso uno al tres hasta que seamos capaces de ejecutar la funcionalidad que necesitamos&lt;/td&gt;
&lt;td&gt;1. Buscar la libreria en el repositorio &lt;br&gt;  2. Instalar con un simple comando en la carpeta del proyecto &lt;br&gt;  3. LISTO!&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Recordando que sin el administrador todo es manual, ahora, ¿te imaginas si sale una actualización? Que martirio seguir el hilo para hacerlo a mano.&lt;/p&gt;

&lt;p&gt;Algunos administradores de paquetes son:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;npm (Javascript)&lt;/li&gt;
&lt;li&gt;maven (Java)&lt;/li&gt;
&lt;li&gt;pip (Python)&lt;/li&gt;
&lt;li&gt;yarn (Javascript)&lt;/li&gt;
&lt;li&gt;composer (PHP)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;2) &lt;strong&gt;Transpilador&lt;/strong&gt; : Estos se encargan de convertir un lenguaje de alto nivel a otro de alto nivel. ¿Esto para que? Recordemos no todos los navegadores van a la par con respecto a las nuevas funcionalidades que añade ES, es por eso, que debemos codear en versiones antiguas para que los navegadores tengan soporte de la aplicación. Por ejemplo, no todos los navegadores soportan &lt;code&gt;import&lt;/code&gt;, la solución sería escribir en un lenguaje mas antiguo de JS para que funcionara, pero hacer eso es complicado, entre más retrocedamos en la sintaxis de JS, menos maduro es el lenguaje.&lt;/p&gt;

&lt;p&gt;La solución, es utilizar un transpilador que haga el trabajo sucio por detrás &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F47c5bxuxp4owfek0t5d9.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F47c5bxuxp4owfek0t5d9.PNG" alt="Transpilador"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3) &lt;strong&gt;Empaquetador de módulos (module bundler)&lt;/strong&gt; : Lo que hace es preparar los patrones de diseño para el entorno de trabajo que utilizaremos en el desarrollo de la aplicación. Por ejemplo, cuando utilizas un framework, normalmente vez que se realiza una estructura de carpetas, archivos base, etc. Algo como esto.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fhackernoon.com%2Fhn-images%2F1%2AJgY30hiRSnk5qP5K07b5EA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fhackernoon.com%2Fhn-images%2F1%2AJgY30hiRSnk5qP5K07b5EA.png" alt="Ejemplo de uso webpack"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Pero no solo eso, el empaquetador también permite unificar los distintos módulos que hay en el proyecto, de esta forma tenemos el código "en uno solo", organizado y con el peso mínimo (hablando en espacio de memoria). En esencia, un &lt;strong&gt;Empaquetador de modulos&lt;/strong&gt; nos permite &lt;strong&gt;organizar el código de Javascript&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;4) &lt;strong&gt;Linters (ESLint)&lt;/strong&gt; : Son "asistentes" que nos soportan en la escritura del código. En la siguiente imagen, se muestra un código, una línea que digamos se esta escribiendo para implementar alguna funcionalidad, lo que hacen los Linters es mostrarnos esos errores y asistirnos en lo que esta fallando, e incluso recomendaciones para tener un mejor código. Como eliminar variables que no estemos usando, variables declaradas sin un valor, etc.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F4l3xkjfj53ve37nmvc9b.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F4l3xkjfj53ve37nmvc9b.PNG" alt="linters"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;| &lt;a href="https://www.youtube.com/watch?v=V4eHayIIq9s" rel="noopener noreferrer"&gt;Video-guía de los cuatro puntos anteriores&lt;/a&gt; |&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;5) &lt;strong&gt;Librería&lt;/strong&gt; : Se trata de una serie de código que realiza una función en especifico, por ejemplo, mandar un mail de restauracion, obtener un excel de algun server como mediafire y transformar las tablas en json, etc. Su misión es cumplir con la tarea cometida (que normalmente es una tarea pequeña, sencilla) y se puede implementar al proyecto con toda libertad. &lt;strong&gt;|&lt;a href="https://ed.team/comunidad/diferencias-entre-libreria-y-framework" rel="noopener noreferrer"&gt;Documento&lt;/a&gt;|&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Las librerías son independientes de cada proyecto, eso quiere decir que se pueden implementar con el patrón de diseño y administración del programador. Crear carpetas, poner archivos en tal carpeta, etc. Es criterio de cada persona/grupo de desarrolladores organizar el código.&lt;/p&gt;

&lt;p&gt;6) &lt;strong&gt;Framework&lt;/strong&gt; : Es un conjunto de librerías y utilidades que se ofrece al desarrollador para trabajar de manera más ordenada y eficaz posible. Se diferencia de una librería porque se adopta un patrón de diseño y metodologías en el desarrollo del código. Se debe acatar las "practicas" que se documenta en el framework. Hacer esto tiene la ventaja que el código puede ser entendible para la mayoría de los desarrolladores que trabajen sobre el mismo framework ya que el código esta estructurado de una manera estándar. &lt;strong&gt;|&lt;a href="https://ed.team/comunidad/diferencias-entre-libreria-y-framework" rel="noopener noreferrer"&gt;Documento&lt;/a&gt;|&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pregunta&lt;/strong&gt; - ¿React.js es librería o framework?&lt;/p&gt;

&lt;p&gt;Respuesta &lt;a href="https://reactjs.org/" rel="noopener noreferrer"&gt;aquí&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;7) &lt;strong&gt;JSX&lt;/strong&gt; : Es una extensión de Javascript que permite describirle a React.js como debe ser la plantilla a renderizar.&lt;br&gt;
Es una sintaxis parecida a HTML, pero no es HTML, &lt;strong&gt;es una extensión de JS para indicar como debe ser la plantilla que se renderiza&lt;/strong&gt; (persona la redundancia, pero había que dejarlo muy claro) &lt;strong&gt;|&lt;a href="https://reactjs.org/tutorial/tutorial.html" rel="noopener noreferrer"&gt;Documento&lt;/a&gt;|&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;8) &lt;strong&gt;API&lt;/strong&gt; : &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Las API son funciones de programación que sirven para manipular diferentes aspectos del navegador y el sistema operativo que ejecuta el sitio, o manipular datos de otros sitios web o servicios.&lt;/em&gt; -Mauricio Garcia&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Para ponerlo asi de sencillo, son funcionalidades que nos ofrece un tercero, por ejemplo, hacer login con facebook, utilizar datos del servidor para nuestro sistema, etc. Pero no se limitan a solo datos o funciones que obtenemos desde un servidor ajeno al sistema. Los navegadores de internet ya tienen sus propias APIs, el gps, micrófono, cámara, hablar con voz de loquendo el texto pasado como argumento, etc. Las APIs no se limitan a solo servicios de "la internet".&lt;/p&gt;

&lt;p&gt;Las API se caracterizan por manipular la información en formato JSON, la razón de esto es que la información con este formato es entendible para la mayoría de lenguajes de programación.&lt;/p&gt;

&lt;p&gt;Con las API solo podemos enviar y recibir información, es todo, el "backend" queda restringido, solo podemos hacer uso de esas funcionalidades pero sin ver como esta hecho.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;| &lt;a href="https://mauriciogc.medium.com/conceptos-b%C3%A1sicos-api-18e1eebc7887" rel="noopener noreferrer"&gt;Documento&lt;/a&gt; |&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;9) &lt;strong&gt;API REST&lt;/strong&gt; : Digamos que son una especie de reglas y estándares que indican como debe de ser un API.&lt;br&gt;
Por ejemplo, para hacer login en utilizando Facebook, ellos deben seguir estándares de seguridad, una forma de estructurar los datos para poder servirnos de sus funcionalidades, etc.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Antes de...&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Estos conceptos se van a utilizar, y, si no los conoces, puedes ir aprendiendo "sobre la marcha". Por ejemplo, para iniciar los proyectos de React se utiliza un administrador de paquetes o cdn. Y lo recomendable (desde mi punto de vista) es estar familiarizado para no desviarse tanto del aprendizaje de esta librería.&lt;/p&gt;



&lt;p&gt;Ya podemos seguir con React.&lt;br&gt;
A decir verdad, la documentación y tutoriales son buenos. Si sirven para apoyarse y aprende de ahí, así que iré mencionando en orden los temas para que puedas hacer lo correcto en la ruta de aprendizaje. Gatear, caminar y luego correr. De igual forma anexare lista de reproducción con cursos gratuitos acerca de estos temas para poder hacer la practica de alguna manera y no solo tener una "guía" escrita.&lt;/p&gt;


&lt;h2&gt;
  
  
  1) Para partir &lt;strong&gt;¿Qué es React JS y como funciona?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="http://www.youtube.com/watch?v=lWQ69WX7-hA" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Fimg.youtube.com%2Fvi%2FlWQ69WX7-hA%2F0.jpg" alt="Que es react js y como funciona"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Sugiero empezar con ese video, nos explica el chiste de utilizar esta librería. Si eres de los que se quedaron estancados o estudiando algo como la metología LAMP en desarrollo web, la forma en que react funciona cambiara por completo tu esquema, y para bien, de hecho, una mejor forma de hacer desarrollo web&lt;/p&gt;
&lt;h2&gt;
  
  
  2) Instalar y preparar el entorno
&lt;/h2&gt;

&lt;p&gt;Manos a la obra para iniciar en React, para eso se debe instalar la librería con un administrador de paquetes (a menos que quieras hacerlo manual, no lo recomiendo) que prepare el entorno de trabajo.&lt;br&gt;
&lt;a href="http://www.youtube.com/watch?v=U9QfEm2brOg" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Fimg.youtube.com%2Fvi%2FU9QfEm2brOg%2F0.jpg" alt="Instalar react"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  3) Crear un componente y practicar los conceptos.
&lt;/h2&gt;

&lt;p&gt;Lo primero sería crear un componente. Hay que dejar claro, que para crear un componente hay varias formas.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Function components (JS con funciones)&lt;/li&gt;
&lt;li&gt;Class components (JS con POO)&lt;/li&gt;
&lt;li&gt;Function components + Hooks&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;La tercera opción es lo más nuevo que hay, y la mejor forma de crear componentes. Eso no quiere decir que las demás opciones sean inservibles, pero paulatinamente los proyectos que se hallan basado un desarrollo sin hooks, paulatinamente (mi opinión) dejaran de existir, o sera cada vez poco común ver proyectos hechos de esa forma. Recomiendo programar con &lt;strong&gt;Function Componentes + Hooks&lt;/strong&gt;, pero ya es criterio de cada quien.&lt;br&gt;
Recuerda, cuando mencionen Hooks, es la forma de crear componentes de la forma más actualizada que se conoce hasta la fecha. Pero, para iniciar en Hooks recomiendo ampliamente empezar por aquí para crear tu primer componente, ya sea utilizando clases o solo funciones. &lt;/p&gt;

&lt;p&gt;*&lt;em&gt;| &lt;a href="https://es.reactjs.org/docs/hello-world.html" rel="noopener noreferrer"&gt;Crear componentes en react - Guia de la documentacion&lt;/a&gt; *&lt;/em&gt;|&lt;/p&gt;

&lt;p&gt;Tambien te puedes apoyar de este curso si prefieres ver que leer. &lt;strong&gt;SOLO SI QUIERES PROGRAMAR CON CLASES O FUNCIONES&lt;/strong&gt;, la verdad, es que no es tan necesario, puedes pasar directamente a intentar programar con Hooks sin ningun problema. De hecho, este punto #3 solo esta de referencia para que sepas que hay varias formas de hacer componentes, no solo una. Mi opinion, pasa directamente a Hooks&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.youtube.com/watch?v=qPu3WBi65PA" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Fimg.youtube.com%2Fvi%2FqPu3WBi65PA%2F0.jpg" alt="Clase básica de React"&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Al final de ese curso y documentación, deberías ser capaz de realizar algo como esto. Usar localStorage para guardar la informacion, validar los campos no esten vacíos, y sobretodo, utilizar componentes con estados y paso de parametros entre cada uno.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;| &lt;a href="https://adoring-darwin-0fa0bd.netlify.app/" rel="noopener noreferrer"&gt;Ejemplo de proyecto que puedes proponerte a reliazar&lt;/a&gt; |&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  4) Hooks
&lt;/h2&gt;

&lt;p&gt;&lt;a href="http://www.youtube.com/watch?v=mOz5eNcEHu4" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Fimg.youtube.com%2Fvi%2FmOz5eNcEHu4%2F0.jpg" alt="Curso de React "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Hooks son una nueva característica en React 16.8. Estos te permiten usar el estado y otras características de React sin escribir una clase.&lt;/em&gt; - Documentación de React.js&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Hooks vino para solucionar el problema de los &lt;strong&gt;estados&lt;/strong&gt; que había en la programación utilizando solo funciones o clases. Ya que carecen de alguna sintaxis que permita manipular los estados de un componente sin utilizar "trucos" raros que solo enrollan más el código. Si usaste los recursos del punto #3, ya sabras de lo que estoy hablando.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;| &lt;a href="https://es.reactjs.org/docs/components-and-props.html" rel="noopener noreferrer"&gt;Guía para Hook&lt;/a&gt; |&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Puedes volver a intentar realizar &lt;strong&gt;| &lt;a href="https://adoring-darwin-0fa0bd.netlify.app/" rel="noopener noreferrer"&gt;Ejemplo de proyecto que puedes proponerte a reliazar&lt;/a&gt; |&lt;/strong&gt; pero con Hooks, y veras la diferencia en el código si no llegas a utlizarlo&lt;/p&gt;
&lt;h1&gt;
  
  
  Check list de conceptos/habilidades en React (al iniciar)
&lt;/h1&gt;

&lt;p&gt;A continuacion una lista de las cosas que deberías saber y tener muy claro antes de avanzar a algo más avanzado en React.js, los tutoriales anexados en esta entrada debieron haber abarcado estos puntos.&lt;/p&gt;


&lt;h3&gt;
  
  
  Carpetas de React
&lt;/h3&gt;

&lt;p&gt;Al iniciar un proyecto, siempre se debe preparar el espacio de trabajo. La librería por default nos da un comando que prepara las carpetas, librerias dependientes, etc. Prácticamente nos "deja" todo listo para que nosotros hagamos la magia.&lt;br&gt;
&lt;code&gt;npx create-react-app my-app&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://reactjs.org/docs/create-a-new-react-app.html" rel="noopener noreferrer"&gt;Más información al respecto&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Estructura de un componente en React
&lt;/h3&gt;

&lt;p&gt;Cuando se crea el entorno de trabajo, todo esta listo para hacer el código. Recordando la filosofía de React, se trata de agrupar el código html, css y javascript acerca del componente que se va a crear. En un contexto de formulario...&lt;/p&gt;

&lt;p&gt;Se podría traer el css del formulario, escribir las validaciones Front-End dentro del componente, escribir el jsx que da el esqueleto del formulario. Opcionalmente, importar otros componentes, por ejemplo, alguno de botones que ya hallamos creados o bajado por Internet. El siguiente código tiene un esqueleto de lo "básico" que podemos aprender como principiantes, y, entre más practica meter mas conceptos avanzados.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//Es un hecho, es la librería en si&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./Formulario.css&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="cm"&gt;/* Ruta del archivo css
que se creo para el componente*/&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;MiComponente&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="cm"&gt;/* Nombre del componente*/&lt;/span&gt;
    &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; 
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;form&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Aqui va mi codigo "HTML" (JSX)
                para darle esqueleto al componente
            &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;form&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
     &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;MiComponente&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Esa sería la estructura básica que se debe escribir al crear un nuevo componente, adicionalmente&lt;/p&gt;

&lt;h3&gt;
  
  
  props
&lt;/h3&gt;

&lt;p&gt;1) En el componente padre se le &lt;strong&gt;pasan los parámetros&lt;/strong&gt; al componente hijo&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Header&lt;/span&gt; 
&lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="na"&gt;1&lt;/span&gt;
&lt;span class="na"&gt;titulo&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;'Tienda Virtual'&lt;/span&gt;&lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;2) En dicho &lt;strong&gt;componente que recibe los valores&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;Header&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"encabezado"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Mi titulo : &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;titulo&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;Esta bien el codigo de arriba, pero, para evitar tener que escribir &lt;code&gt;props&lt;/code&gt; + &lt;code&gt;nombreAtributo&lt;/code&gt; se hace destructuring para tener las variables de forma "directa".&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Por ejemplo :&lt;/strong&gt; Si quisiera pasar una fecha al header. Tendria una variable con la fecha.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;fechaActual&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;getDate&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Y, en vez de hacer esto&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Header&lt;/span&gt; &lt;span class="na"&gt;titulo&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;'Tienda Virtual'&lt;/span&gt;
&lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="na"&gt;1&lt;/span&gt;    
&lt;span class="na"&gt;fecha&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="na"&gt;fechaActual&lt;/span&gt;&lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;1) Se &lt;strong&gt;pasan los parámetros&lt;/strong&gt; del componente padre al padre hijo (de la siguiente manera)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Header&lt;/span&gt; 
&lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="na"&gt;1&lt;/span&gt;
&lt;span class="na"&gt;titulo&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;'Tienda Virtual'&lt;/span&gt;
&lt;span class="na"&gt;fecha&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;fechaActual&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;2) En el componente hijo que recibe esas "propiedades", en vez de hacer esto.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;Header&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"encabezado"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Mi titulo : &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;titulo&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Hacer esto&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;Header&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="nx"&gt;titulo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;fecha&lt;/span&gt;&lt;span class="p"&gt;}){&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Fragment&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"encabezado"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Mi titulo : &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;titulo&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Hoy es &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;fecha&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Fragment&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;En consecuencia, se pasa directamente "la variable" y no hay necesidad de hacer referencia con &lt;code&gt;props.atr&lt;/code&gt;. Esto es debido a que &lt;code&gt;props&lt;/code&gt; es un objeto, por esa misma razón se hace el destructuring, para tener en variables las propiedades de dicho objeto y ser usadas de forma directa.&lt;/p&gt;

&lt;p&gt;¿Es necesario hacer esto? No, pero ayuda a que el código sea más limpio.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NOTA&lt;/strong&gt;: En cada componente, es obligatorio pasar como atributo la propiedad &lt;code&gt;key&lt;/code&gt; con un valor único como identificador, esto le ayuda a react a poder distinguir los componentes. Si bien, solo existe un header (o es lo normal), otros componentes como botones, tarjetas se pueden repetir varias veces y es necesario distinguir uno de otro para saber cual de todos manipular.&lt;/p&gt;

&lt;h3&gt;
  
  
  React Hooks
&lt;/h3&gt;

&lt;p&gt;A partir de la version 16.8 se agrego esta nueva forma de escribir código en React, de momento, tal vez no todos los proyectos hechos con esta libreria tengan ese "soporte" ya que es casi nueva. Pero, es la nueva forma (definitiva) de escribir código. Mucho mejor que la forma de escribir el código antiguo por varios motivos. La razon es...&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Permite actualizar el State sin necesidad de crear un class Component&lt;/li&gt;
&lt;li&gt;El código se reduce considerablemente a comparación de la forma antigua de escribir código (functional componentes y class components).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Existen 2 tipos de Hooks
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Básicos&lt;/th&gt;
&lt;th&gt;Avanzados&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;useState&lt;/td&gt;
&lt;td&gt;useContext&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;useEffect&lt;/td&gt;
&lt;td&gt;useRef&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;useReducer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;userCallback&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;useMemo&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Bien, estos hooks, ¿es necesario aprenderlos todos? De momento, mi respuesta es no. No conozco a alguien (todavía) que domine al 100% algún lenguaje de programación junto con sus librerías o frameworks. Aqui es lo mismo, no es necesario aprenderlos todos. &lt;/p&gt;

&lt;p&gt;De hecho, lo que te debes llevar de esta lectura (spoiler) seran los siguientes conceptos.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;useState&lt;/li&gt;
&lt;li&gt;useEffect&lt;/li&gt;
&lt;li&gt;Conceptos/Nociones de como funciona React.js&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Ojo, estos hooks avanzados no son los únicos, existen más, pero estan enfocados a resolver problemas de Facebook o similares, pero siendo honestos, no creo que muchos de los lectores necesiten utilizarlos porque su proyecto sera un sistema distribuido con millones de peticiones por segundo.&lt;/p&gt;

&lt;h3&gt;
  
  
  useState
&lt;/h3&gt;

&lt;p&gt;Una de las cosas que hace React.js es dibujar HTML y darle cierta funcionalidad al sitio web. Esto se hace con useState&lt;br&gt;
Esta maravilla vino para solucionar los problemas que había al codificar con clases o funciones. No entrare mucho en detalle, pero, al utilizar useState nos ahorramos muchas líneas de código y código mas de los necesario para reutilizar los componentes que nos permite crear el DOM de una manera modularizada y eficaz.&lt;br&gt;
Antes de continuar con la lectura, recomiendo ampliamente revisar este video que contrasta las diferencias entre el antes y despues de codificar en React.js &lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.youtube.com/watch?v=PIPC6kKR6Xw" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Fimg.youtube.com%2Fvi%2FPIPC6kKR6Xw%2F0.jpg" alt="explanation useState"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;No voy a discutir, sobre si deberias aprendar a codear con hooks o sin hooks, pero en lo personal pienso que es más sencillo aprender esta "metodología" para dejar de lado la antigua codificacion.&lt;/p&gt;

&lt;p&gt;Este Hook no viene importado por default al llamar la librería de React, para utilizarlo, se hace la siguiente linea de código.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;,{&lt;/span&gt;&lt;span class="nx"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Con esto, ya somo capaces de utilizar la siguiente función o línea de código.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;clientes&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;guardarCliente&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Entrando en profundidad... Use state nos permite hacer un array destructuring.&lt;/p&gt;

&lt;p&gt;1) El primer valor &lt;code&gt;clientes&lt;/code&gt; es el nombre de la variable, el nombre de nuestro estado con el cual podemos hacer la referencia del estado.&lt;br&gt;
2) El segundo valor, es una "función" que nos permite cambiar el estado de la variable.&lt;/p&gt;

&lt;p&gt;Todo ese array es igual a &lt;code&gt;useState();&lt;/code&gt;, esta "función" denota el valor de nuestra variable (estado). Dentro de la funcion pasamos como parametro el valor inicial (si es que lo hay). Por ejemplo...&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;clientes&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;guardarCliente&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Pepito&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Sandra&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Eso, nos indica que tenemos un "estado" llamado clientes que tiene como valor inicial a 2 personas (Pepito y Sandra). Y, para que los clientes cambien de estado, se hará uso de la función llamada guardarCliente, (ya te imaginas que hará guardarCliente, ¿verdad?)&lt;/p&gt;




&lt;h3&gt;
  
  
  Asignación de useState
&lt;/h3&gt;

&lt;p&gt;Retomando&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;clientes&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;guardarCliente&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Pepito&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Sandra&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A lo largo de la ejecucion, en algun momento voy a querer guardar un nuevo cliente, ya sea para tenerlo en mi lista con mails automatizados, mandar promociones, etc.&lt;br&gt;
Si quisiera guardar un nuevo cliente, alguien que sabe javascript haria lo siguiente&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;clientes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Maria&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Y en efecto, ahora tendría un arreglo con 3 clientes. Pero esto no es la forma correcta de hacerlo, React tiene su "filosofia" donde no debemos alterar directamente el estado de nuestra variable. Por eso existe esa funcion como segundo valor en el destructuring.&lt;br&gt;
Si te preguntan:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;¿Se debe modificar el useState directamente?&lt;/strong&gt; Tu dices...&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fexternal-content.duckduckgo.com%2Fiu%2F%3Fu%3Dhttps%253A%252F%252Fi0.wp.com%252Fwww.techjunkie.com%252Fwp-content%252Fuploads%252F2018%252F01%252Fangry-no-meme-4.jpg%253Fw%253D690%2526ssl%253D1%26f%3D1%26nofb%3D1" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fexternal-content.duckduckgo.com%2Fiu%2F%3Fu%3Dhttps%253A%252F%252Fi0.wp.com%252Fwww.techjunkie.com%252Fwp-content%252Fuploads%252F2018%252F01%252Fangry-no-meme-4.jpg%253Fw%253D690%2526ssl%253D1%26f%3D1%26nofb%3D1" alt="no-answer"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;¿Entonces como lo hago?. Con la funcion del state. En este caso, se esta manipulando un arreglo, y lo que se necesita, es agregar un nuevo cliente al estado de &lt;code&gt;clientes&lt;/code&gt;. Para eso, nos podemos apoyar el método para arreglos &lt;code&gt;spreadOperator&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;guardarCliente&lt;/span&gt;&lt;span class="p"&gt;([...&lt;/span&gt;&lt;span class="nx"&gt;clientes&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;miNuevoCliente&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;De esa forma, se ha agregado el nuevo cliente pero sin modificar directamente el estado. Esa el a forma correcto de cambiar el estado. Ya sea para agregar, eliminar, etc. Cualquier acción que se necesite cambiar en el estado, no debe ser de forma directa. Se puede, pero no es lo correcto&lt;/p&gt;




&lt;h2&gt;
  
  
  useEffect()
&lt;/h2&gt;

&lt;p&gt;La tarea principal de React, como había dicho en el punto de &lt;strong&gt;useState&lt;/strong&gt; es pintar el DOM con Javascript y poder alterar el estado para re-pintar un nuevo DOM con las nuevas modificaciones.&lt;/p&gt;

&lt;p&gt;¿Entonces React solo sirve para eso? Vaya perdida de tiempo&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fexternal-content.duckduckgo.com%2Fiu%2F%3Fu%3Dhttps%253A%252F%252Fcrazyonclassicrock.files.wordpress.com%252F2019%252F09%252Fight-imma-head-out-meme.png%253Fw%253D400%2526h%253D347%26f%3D1%26nofb%3D1" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fexternal-content.duckduckgo.com%2Fiu%2F%3Fu%3Dhttps%253A%252F%252Fcrazyonclassicrock.files.wordpress.com%252F2019%252F09%252Fight-imma-head-out-meme.png%253Fw%253D400%2526h%253D347%26f%3D1%26nofb%3D1" alt="leaving-meme"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Pues no, la librería permite hacer aplicaciones web ¿ya capte tu atención, no? Vamos a intentar aterrizar en algo antes de explicar que useEffect.&lt;/p&gt;

&lt;p&gt;Por defecto, con el código de Javascript podemos hacer varias cosas en el navegador, como consultar una API para extrar datos, utilizar las APIs del navegador para hacer uso del gps, micrófono, etc. &lt;strong&gt;Eso con JS&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Pero React, por contraparte, no puede realizar tales acciones. Pero si podemos actualizar el estado del DOM.&lt;/p&gt;

&lt;p&gt;A lo que voy es, que React permite hacer un "puente" con Javascript.&lt;br&gt;
React le comparte a JS como se debe pintar el DOM mientras que JS le comparte la información que ha "computado" a React para que haga el código que se encarga de volver a pintar.&lt;/p&gt;

&lt;p&gt;Entonces...&lt;br&gt;
&lt;strong&gt;¿Qué es useEffect?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Es una función que se ejecuta cada vez que el useState se actualiza o cambia de estado. Esta función por detrás hace "código" para poder crear aplicaciones web (obtener la información de APIs, por poner un ejemplo). Esta información "computada" sirve para crear el DOM con un poco más de criterio y no solo el html escrito en "crudo" por nosotros.&lt;/p&gt;

&lt;p&gt;Para este concepto, recomiendo ver el siguiente vídeo. Sin duda una explicación muy completa con ejemplo practico para entender de que va esto del useEffect. Antes de revisar el enlace, ya debe estar muy claro que es useState (y haberlo practicado en algún ejemplo sencillo, de preferencia).&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.youtube.com/watch?v=0_D8ruGVp20" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Fimg.youtube.com%2Fvi%2F0_D8ruGVp20%2F0.jpg" alt="explanation useEffect"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="cm"&gt;/* SE EJECUTA CADA QUE EL USESTATE CAMBIA DE ESTADO */&lt;/span&gt;
  &lt;span class="nf"&gt;useEffect&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Navegador cargó o algo pasó en useState&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="cm"&gt;/* COMO SEGUNDO PARÁMETRO (opcionalmente)
  UN ARREGLO VACIÓ PARA QUE SOLO SE EJECUTE 1 VEZ */&lt;/span&gt;
  &lt;span class="p"&gt;},[]);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;[]&lt;/code&gt; que es el segundo parámetro de la función, es para escuchar los cambios de useState&lt;/p&gt;




&lt;h3&gt;
  
  
  PropTypes
&lt;/h3&gt;

&lt;p&gt;Son una forma de documentar los componentes.&lt;/p&gt;

&lt;p&gt;Se importa de manera normal el modulo&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;PropTypes&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;prop-types&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Y normalmente, antes del export default se hace la documentación, de esta manera.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="nx"&gt;Formulario&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;propTypes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;crearCita&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;PropTypes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;func&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;isRequired&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;nombreComponente&lt;/code&gt; seguido de un &lt;code&gt;.&lt;/code&gt; seguido de &lt;code&gt;propTypes&lt;/code&gt;. Todo es es igual a un &lt;code&gt;objeto&lt;/code&gt; el cual contiene el nombre de la propiedad(es) como atributo. El valor de dicho atributos es...&lt;/p&gt;

&lt;p&gt;&lt;code&gt;PropTypes&lt;/code&gt; (o el nombre que le hallas puesto al modulo que importa por default) seguido de &lt;code&gt;.&lt;/code&gt; seguido del &lt;code&gt;tipo de valor que recibe ese atributo&lt;/code&gt;. Opcionalmente puedes agregar mas "métodos" como &lt;code&gt;.isRequired&lt;/code&gt; (es atributo obligatorio que debe recibir el componente) para denotar mas información &lt;/p&gt;

&lt;h3&gt;
  
  
  Eventos de React
&lt;/h3&gt;

&lt;p&gt;Partiendo de este código&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;caja&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;click&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;rellenarFondo&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Con eso, se rellena el background de un elemento div. Es lo que se conoce como eventos en el DOM, ya sea &lt;code&gt;ondrop&lt;/code&gt; &lt;code&gt;onclic&lt;/code&gt; &lt;code&gt;mousedown&lt;/code&gt; etc. Todo esto, tambien se puede manejar en React, pero ya tenemos eventos en esta librería. ¿Como se utilizan los eventos entonces? Si no es "correcto" utilizar directamente el código de Javascript.&lt;/p&gt;

&lt;p&gt;1) Al momento de crear un componente, se le puede pasar en las propiedades un atributo con el nombre del evento. La pregunta es, ¿y que eventos puedo manejar? Bueno, eso viene en la documentacion de React en este &lt;strong&gt;&lt;a href="https://es.reactjs.org/docs/events.html" rel="noopener noreferrer"&gt;link&lt;/a&gt;&lt;/strong&gt; . Es cuestion de revisar cual se necesita.&lt;/p&gt;

&lt;p&gt;2) Esa propiedad, debe ejecutar una funcion. Una accion al capturar el evento. Entonces, como valor, se le pasa &lt;strong&gt;UNA FUNCION FLECHA QUE EJECUTA UNA FUNCION&lt;/strong&gt; (callback)&lt;/p&gt;

&lt;p&gt;Esto se explica mejor con código... Un ejemplo&lt;br&gt;
Dentro del componente, se crea una función expresiva de tipo flecha de JS, por ejemplo, un console.log&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;saludo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
 &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Hola mundo!&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Lo que sigue es pasar en los atributos el tipo de evento y la accion que va a realizar en consecuencia&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
type="button"
onClick = &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;saludo&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
Saludar!
&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Con esto, al presionar el botón se mandara un saludo por consola, el evento puede ser cualquier mientras sea una función de tipo flecha que ejecuta una función expresiva del tipo flecha.&lt;br&gt;
Esto tiene una razón, al hacer el código de esa forma, los eventos no se ejecutan al cargar el código del script, si no que esperan a ser accionados para realizar tal tarea.&lt;/p&gt;


&lt;h3&gt;
  
  
  Fragment
&lt;/h3&gt;

&lt;p&gt;Retorna los elementos del componente sin necesidad de estar en una etiqueta contenedora&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;Fragment&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Fragment&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Fragment&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Conclusión
&lt;/h1&gt;

&lt;p&gt;Para iniciar a crear aplicaciones dignas de mostrar a un reclutador en alguna entrevista de trabajo, es aceptable iniciar poniendo en practica useState y useEffect. (Hooks, recomiendo encarecidamente utilizar esa nueva forma de escribir código)&lt;/p&gt;

&lt;p&gt;Más las nociones de ¿qué es React? Ventajas de React ¿Para que utilizarlo? Las buenas practicas ¿Cómo es la forma de "pensar" al crear aplicaciones web utilizando esta librería? ¿Qué son los componentes? Etc.&lt;/p&gt;

&lt;p&gt;Esto, solo ha sido una "recapitulacion" de los "3 pilares" a dominar en React. &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;¿Qué es y como trabaja React?&lt;/li&gt;
&lt;li&gt;useState()&lt;/li&gt;
&lt;li&gt;useEffect()&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Queda implicitamente que ya dominas o te defiendes muy bien en el lenguaje de Javascript. De lo contrario, puedes checar esta &lt;strong&gt;&lt;a href="https://dev.to/severedwig/conocimientos-de-javascript-que-debes-conocer-antes-de-aprender-react-js-4j67"&gt;entrada&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Para ver en practica el código de los Hooks, esta serie de videos puede ser buena opcion para poner manos a la obra lo que se abarcó en esta entrada.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.youtube.com/watch?v=Di4eAxkPNp0" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Fimg.youtube.com%2Fvi%2FDi4eAxkPNp0%2F0.jpg" alt="react-hooks-guide"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>webdev</category>
      <category>javascript</category>
      <category>spanish</category>
    </item>
    <item>
      <title>¿Qué son la Cookies?</title>
      <dc:creator>programador51</dc:creator>
      <pubDate>Fri, 08 Jan 2021 18:33:43 +0000</pubDate>
      <link>https://dev.to/programador51/que-son-la-cookies-3p9a</link>
      <guid>https://dev.to/programador51/que-son-la-cookies-3p9a</guid>
      <description>&lt;p&gt;¿Alguna vez te has topado con esto?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--gktnHoyN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://techpostplus.com/wp-content/uploads/2020/07/Setup-cookie-consent-code-without-plugin.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--gktnHoyN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://techpostplus.com/wp-content/uploads/2020/07/Setup-cookie-consent-code-without-plugin.jpg" alt="Cookies del navegador"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Eso, son las Cookies.&lt;/p&gt;

&lt;h2&gt;
  
  
  ¿Qué son?
&lt;/h2&gt;

&lt;p&gt;Son archivos que el navegador crea cuando entras a un sitio web. Se guardan en el ordenador con información diversa de la actividad hecha en ese sitio web.&lt;/p&gt;

&lt;p&gt;Por esa razón, la ventana emergente tiene un botón de aceptar o rechazar, donde aceptamos dicha acción. Y como dicen, sobre aviso no hay engaño.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Oaayb-TA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/nyyd23s6iywi12dvxcfz.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Oaayb-TA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/nyyd23s6iywi12dvxcfz.PNG" alt="cookies aceptas"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ¿Que tipo de información contiene?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Preferencias básicas de navegación&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Idioma, de esta forma el sitio web siempre estará en el lenguaje que nosotros establezcamos.&lt;/li&gt;
&lt;li&gt;Moneda, así los precios se reflejan al de nuestra zona &lt;/li&gt;
&lt;li&gt;Carrito/Likes &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Información avanzada&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Número de visitas que has hecho en el sitio web&lt;/li&gt;
&lt;li&gt;El tiempo que has estado utilizando el sitio web&lt;/li&gt;
&lt;li&gt;Los clicks que has realizado en determinadas pantallas de la pagina&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  ¿Para qué son?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Ofrecen una experiencia mas personalizada y navegar de forma más comoda&lt;/strong&gt;. Un ejemplo más claro son los "toggle button" que están implementando algunos desarrolladores para activar y desactivar el modo oscuro en los sitio web. Pese a que no tengas alguna cuenta en su sistema, tu configuracion del dark mode se mantiene a pesar de que cierras la pagina, esto se debe a las cookies&lt;/p&gt;

&lt;h2&gt;
  
  
  Tipos de Cookies
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Temporales
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Son cookies que se eliminan cuando dejan de ser útiles&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;Claro ejemplo cuando inicias sesión en Facebook, cada vez que entras no debes volver a tipear las credenciales, ya es directo.&lt;br&gt;
Pero, cuando cierras sesión, estas cookies se eliminan por razones de seguridad.&lt;/p&gt;

&lt;h3&gt;
  
  
  Permanentes
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Estas se alojan en una carpeta del navegador y no se eliminan nunca. (a menos que tu lo hagas manualmente)&lt;/strong&gt;, un ejemplo es cuando entras a sitios de vuelos para buscar precios y destinos en tus próximas vacaciones, inicialmente optas por vuelos que sean hacia Europa, pero decides revisar en días posteriores para ver si lanzan algún descuento o promoción. Pueden suceder muchas cosas, como ver precios alzados o precios difíciles de rechazar, y no es que esten en promoción, si no que las cookies han realizado alguna "especie de marketing" para que compres algún vuelo. Esto seguirá persistiendo hasta que no borres las cookies por tu cuenta.&lt;/p&gt;

&lt;h3&gt;
  
  
  De terceros
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Son cookies creadas por terceros, es decir, un agente externo al sitio web que estas navegando&lt;/strong&gt;. Un ejemplo de esto es Amazon Advertising, cuando tu navegas en la tienda y buscas latops dell, ellos ya tienen el target de lo que buscas para darte una serie de recomendaciones. Hasta aquí, todo bien.&lt;br&gt;
Pero que sucede si vas y lees el blogger de alguna persona. &lt;strong&gt;AL COSTADO SALEN ANUNCIOS DE ESAS LAPTOPs DELL&lt;/strong&gt;, bueno, esto no es porque blogger tenga un mecanismo de espionaje, si no que permite las cookies de Amazon, ellos son las responsables que esas laptops te persigan a donde los cookies de Amazon puedan entrar.&lt;/p&gt;

&lt;h2&gt;
  
  
  ¿Las cookies son seguras?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Si y no&lt;/strong&gt;, todo depende de quien sea el responsable del sitio web que visites.&lt;/p&gt;

&lt;p&gt;Amazon nunca usaría las cookies para fines maliciosos.&lt;/p&gt;

&lt;p&gt;En cambio &lt;a href="http://www.tortillerasqueamasantumasa.com"&gt;www.tortillerasqueamasantumasa.com&lt;/a&gt; salta miles de anuncios al entrar, el navegador advierte peligro en el sitio y ademas aseguran ser "Soporte técnico de Microsoft que han detectado un virus". Es muy claro que si aceptas las cookies puedes esperar algo malo.&lt;/p&gt;

&lt;p&gt;Si eres muy paranoico con este tema, siempre puedes abrir el modo privado para que las cookies nunca se almacenen en tu navegador.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;| &lt;a href="https://www.youtube.com/watch?v=-bBvTUDhaNw"&gt;Recurso de la entrada&lt;/a&gt; |&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>cookies</category>
    </item>
    <item>
      <title>Conocimientos de Javascript que debes conocer antes de aprender React.js</title>
      <dc:creator>programador51</dc:creator>
      <pubDate>Fri, 08 Jan 2021 03:37:32 +0000</pubDate>
      <link>https://dev.to/programador51/conocimientos-de-javascript-que-debes-conocer-antes-de-aprender-react-js-4j67</link>
      <guid>https://dev.to/programador51/conocimientos-de-javascript-que-debes-conocer-antes-de-aprender-react-js-4j67</guid>
      <description>&lt;p&gt;&lt;strong&gt;Contexto&lt;/strong&gt;&lt;br&gt;
React.js utiliza Javascript para crear el front-End de los proyectos que nos interesa desarrollar (más conceptos básicos de HTML5 y CSS). Pero no solo eso, si no que utiliza extensiones y mejoras que se le han dado al lenguaje para sacarle más partido.&lt;/p&gt;

&lt;p&gt;Es por eso, que hay que estar actualizados en lo que respecta de Javascript, de lo contrario, no entederemos muy bien al momento de estudiar y practicar esta libreria, ya que esos son sus pilares.&lt;br&gt;
De hecho, los objetos son todo en Javascript, así que debes irte con la mente de que si o si usaras POO en el caso de usar React.js&lt;/p&gt;

&lt;p&gt;Aunque la lista se vea "grande", no es broma que se utilizan al momento de codear en React.js , no intentes avanzar a algo mas experimentado hasta que no te asegures de dominar los puntos que muestro a continuación. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NOTA&lt;/strong&gt;: Recomiendo leer o revisar la video-guías que deje anexado al final de cada punto, algunos temas son bastante extensos y pienso que esos recursos pueden explicarlo mucho mejor que yo, la entrada es una "check list" para que te des una idea si puedes entrar de lleno o necesitas indagar alguno de los puntos porque lo desconocías o no dominas muy bien. Tampoco debes considerar esta entrada como algo "oficial" si no como un recurso más de referencia para buscar la información que necesites.&lt;/p&gt;
&lt;h1&gt;
  
  
  Lo que debes de saber
&lt;/h1&gt;
&lt;h2&gt;
  
  
  Ecmascript
&lt;/h2&gt;

&lt;p&gt;Ecmascript es un estándar que define cómo debe funcionar un lenguaje (JS en este caso). Esto ha resultado en tener mas funcionalidades y mejoras de lo que era JS en sus inicios de 1995 hasta la actualidad. Tal vez te suene ES6 o ES7, bueno, estas son "versiones de JS", entre más nueva, más y mejores cosas tenemos en el lenguaje. Si tu plan es aprender React.js o Node.JS, tienes que aprender ES primero, de lo contrario, todo lo que veas te sonara en chino. De hecho, todos los puntos restantes, pertecen a conceptos de Ecmascript. &lt;strong&gt;| &lt;a href="https://www.youtube.com/watch?v=LWiMWZ9-cdw&amp;amp;list=PLhSj3UTs2_yX_ct0OfHrmMwKL8wpz-N2j&amp;amp;index=1" rel="noopener noreferrer"&gt;Curso de ES&lt;/a&gt; |&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  var, let &amp;amp; const
&lt;/h2&gt;

&lt;p&gt;Antes, para declarar variables en JS, solo se podía hacer con &lt;em&gt;var&lt;/em&gt;, esto ha cambiado, ya existen otras alternativas como &lt;em&gt;let&lt;/em&gt; y &lt;em&gt;const&lt;/em&gt;. &lt;em&gt;var&lt;/em&gt; es cosa del pasado, si bien utilizarlo no tiene nada de malo, tiene sus inconvenientes y es por eso que han sido desplazadas por &lt;code&gt;let&lt;/code&gt; y &lt;code&gt;const&lt;/code&gt; &lt;strong&gt;| &lt;a href="https://medium.com/@tatymolys/var-let-y-const-donde-cuando-y-por-qu%C3%A9-d4a0ee66883b" rel="noopener noreferrer"&gt;Documento del tema&lt;/a&gt; | &lt;a href="https://www.youtube.com/watch?v=oqrDD70roLQ&amp;amp;list=PLhSj3UTs2_yX_ct0OfHrmMwKL8wpz-N2j&amp;amp;index=4" rel="noopener noreferrer"&gt;Video-Guía&lt;/a&gt; |&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Scope de JS
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;El scope de una variable hace referencia al lugar donde esta va a vivir , o podrá ser accesible. &lt;em&gt;- Juan Bori&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;En esencia, sería utilizar el bloque de código en el que nos encontramos, y, en caso de no contar con los elementos necesarios para realizar las operaciones necesarias, extender el foco y mirar los bloques de códigos adyacentes. Y así sucesivamente hasta encontrar las variables y funciones que se necesiten.&lt;/p&gt;

&lt;p&gt;Por ejemplo, el siguiente código imprime la palabra 'Television', por que el "scope" de la función se basa en la información que esta delimitada por sus corchetes&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;objeto&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Mascota&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;estoyEnMiCasa&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;objeto&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Televesion&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Estamos imprimiendo &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;objeto&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;estoyEnMiCasa&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ahora, que sucedería si la función &lt;code&gt;estoyEnMiCasa()&lt;/code&gt; no tuviera ningún objeto, tan pobre que no tengo nada en la casa y por ende, ningún objeto que imprimir. Bueno, lo que hará la función es extender su búsqueda fuera de la los corchetes (es decir, un nivel más arriba) y tomar el primer elemento que encuentre para mostrarlo en pantalla.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;objeto&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Mascota&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;estoyEnMiCasa&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Estamos imprimiendo &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;objeto&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;estoyEnMiCasa&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Recomiendo echar un vistazo a los recursos para que te enteres con ejemplos más "difíciles" de lo que es el scope, pero al menos ya tienes una idea.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;| &lt;a href="https://somospnt.com/blog/120-scope-en-javascript#:~:text=%C2%BFQue%20es%20el%20Scope%20en%20JavaScript%3F&amp;amp;text=El%20scope%20de%20una%20variable,cada%20parte%20de%20nuestro%20c%C3%B3digo." rel="noopener noreferrer"&gt;Documento del tema&lt;/a&gt; | &lt;a href="https://www.youtube.com/watch?v=s-7C09ymzK8" rel="noopener noreferrer"&gt;Video-guía&lt;/a&gt; |&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Template Strings
&lt;/h2&gt;

&lt;p&gt;Son plantillas que nos permiten incrustar uso de expresiones (prácticamente concatenar para obtener un string)&lt;/p&gt;

&lt;p&gt;La sintaxis para los template strings es la siguiente&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;miVariable&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Como este&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="c1"&gt;//Sintaxis template strings&lt;/span&gt;
&lt;span class="c1"&gt;//1. Comillas invertidas : ``&lt;/span&gt;
&lt;span class="c1"&gt;//2. Cualquier texto dentro de las comillas invertidas : `Hola`&lt;/span&gt;
&lt;span class="c1"&gt;//(Puedes utilizar con toda libertad espacios, &lt;/span&gt;
&lt;span class="c1"&gt;//saltos de línea, tabulaciones, etc)&lt;/span&gt;

&lt;span class="c1"&gt;//Sintaxis concatenar variables&lt;/span&gt;
&lt;span class="c1"&gt;//1. Signo de dolar : $&lt;/span&gt;
&lt;span class="c1"&gt;//2. Seguido de unos corchetes: ${}&lt;/span&gt;
&lt;span class="c1"&gt;//3.Dentro de los corchetes va el nombre de la variable&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Cualquier texto &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;miVariable&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;La pregunta es, ¿por qué template strings y no la forma tradicional de JS si ambos pueden hacer lo mismo? Muy sencillo, template strings es mas manejable y sencillo de leer. Hecha un ojo al siguiente código.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;nombre&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;José Luis&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;edad&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;22&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;nacionalidad&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Mexicano&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;elementoIncrustarDOM&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`
&amp;lt;ul&amp;gt;
 &amp;lt;li&amp;gt;Mi nombre es &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;lt;/li&amp;gt;
 &amp;lt;li&amp;gt;Mi edad es &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;edad&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;lt;/li&amp;gt;
 &amp;lt;li&amp;gt;Mi nacionalidad es &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;nacionalidad&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ahora solo necesito hacer un innerHTML de &lt;code&gt;let elementoIncrustarDOM&lt;/code&gt; para verlo en el navegador por pantalla. Si ya sabes Javascript, ya te imaginas como sería su equivalente poniendo los símbolos de &lt;code&gt;+&lt;/code&gt; y cerrar comillas entre cada texto/variable, muy tedioso y difícil de mantener&lt;br&gt;&lt;br&gt;
&lt;strong&gt;| &lt;a href="https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/template_strings" rel="noopener noreferrer"&gt;Documento del tema&lt;/a&gt; | &lt;a href="https://www.youtube.com/watch?v=_YEh7kdEZGY" rel="noopener noreferrer"&gt;Video-guía&lt;/a&gt; |&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Funciones - "function declaration"
&lt;/h2&gt;

&lt;p&gt;Estas funciones tienen la característica de que pueden ser llamadas sin importar el orden que tengan dentro del código, el siguiente código por ejemplo.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;//El código se ejecuta sin problema&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;multiplicacion&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;multiplicacion&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;En otros lenguajes como C++, intentar llamar una función antes de que sea declarada tira un error por qué "no existe". Pero en javascript no sucede esto, ya que se hace un "mapeo" de las funciones que existan. Por esa razón se puede ejecutar sin problema. &lt;strong&gt;| &lt;a href="https://developer.mozilla.org/es/docs/Web/JavaScript/Guide/Funciones#Declaraci%C3%B3n_de_funci%C3%B3n" rel="noopener noreferrer"&gt;Documento del tema&lt;/a&gt; |&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Funciones - "function expression"
&lt;/h2&gt;

&lt;p&gt;Para este caso, la sintaxis es distinta. Ya que se guarda la función dentro de una variable. ¿Cual es la diferencia? Que no podemos invocar a la variable (que contiene a la función) antes de que esta sea declarada. El siguiente ejemplo tira un error por la razón que acabo de explicar.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;//Eror, el código no se ejecuta correctamente&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;suma&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;suma&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;numeroA&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;numeroB&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;numeroA&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;numeroB&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="c1"&gt;//Si pusiera este trozo de código debajo de la función&lt;/span&gt;
&lt;span class="c1"&gt;//funcionaría correctamente&lt;/span&gt;
&lt;span class="c1"&gt;//console.log(suma(1,2));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;| &lt;a href="https://developer.mozilla.org/es/docs/Web/JavaScript/Guide/Funciones#Expresiones_function" rel="noopener noreferrer"&gt;Documento del tema&lt;/a&gt; | &lt;a href="https://www.youtube.com/watch?v=H6U1Pm7x60E&amp;amp;list=PLvq-jIkSeTUZ6QgYYO3MwG9EMqC-KoLXA&amp;amp;index=11" rel="noopener noreferrer"&gt;Video-guía&lt;/a&gt; |&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Funciones - Parámetros por default
&lt;/h2&gt;

&lt;p&gt;Ya se conoce que si invocas una función que debe recibir 2 parámetros, le debes pasar esos 2 parámetros, de lo contrario la ejecución falla. Pero, se puede declarar y darle valores por default en caso de que no siempre suceda esto.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;informacionEmpleado&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;José Luis&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;informacionEmpleado&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;nombre&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Desconocido&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;puesto&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Sin definir&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s2"&gt;`El empleado &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; trabaja en el puesto &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;puesto&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;El código no falla porque se establecen valores por default en caso de no recibir todos los parámetros solicitados.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;| &lt;a href="https://developer.mozilla.org/es/docs/Web/JavaScript/Guide/Funciones#Par%C3%A1metros_predeterminados" rel="noopener noreferrer"&gt;Documento del tema&lt;/a&gt; | &lt;a href="https://www.youtube.com/watch?v=H6U1Pm7x60E&amp;amp;list=PLvq-jIkSeTUZ6QgYYO3MwG9EMqC-KoLXA&amp;amp;index=11" rel="noopener noreferrer"&gt;Video-guía&lt;/a&gt; |&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Funciones flecha - Arrow functions
&lt;/h2&gt;

&lt;p&gt;Estas funciones cumplen la misma función que las de JS, sus ventajas: una sintaxis más corta y mas fácil de leer/comprender. Su idea es implementar funciones en una sola línea que les permitan ser expresivas y fácil de entender (al ser de una sola línea)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;listaEmpleados&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Juan&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Maria&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Sandra&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="c1"&gt;//Sintaxis de función flecha&lt;/span&gt;
&lt;span class="c1"&gt;//1. Paréntesis con parámetros a recibir: (lista)&lt;/span&gt;
&lt;span class="c1"&gt;//2. Símbolo: =&amp;gt; (De ahí el nombre, parece una flecha)&lt;/span&gt;
&lt;span class="c1"&gt;//3. Paréntesis junto con el código de la función&lt;/span&gt;
&lt;span class="c1"&gt;// {ALGÚN CÓDIGO DE JS}&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;numeroEmpleados&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;lista&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s2"&gt;`La empresa tiene &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;lista&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; empleados`&lt;/span&gt;&lt;span class="p"&gt;;}&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;numeroEmpleados&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;listaEmpleados&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;| &lt;a href="https://es.javascript.info/arrow-functions-basics" rel="noopener noreferrer"&gt;Documento del tema&lt;/a&gt; | &lt;a href="https://www.youtube.com/watch?v=WuCw9agV3Rc&amp;amp;list=PLvq-jIkSeTUZ6QgYYO3MwG9EMqC-KoLXA&amp;amp;index=22" rel="noopener noreferrer"&gt;Video-guía&lt;/a&gt; |&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Object literal
&lt;/h2&gt;

&lt;p&gt;Un objeto es una colección de datos relacionados y/o funcionalidad&lt;br&gt;
En javascript podemos asociar una variable con distintos atributos. Algo como lo siguiente.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;//Sintaxis&lt;/span&gt;
&lt;span class="c1"&gt;//1. Se declara una variable let persona;&lt;/span&gt;
&lt;span class="c1"&gt;//2. Se asigna a la variable lo siguiente = {}&lt;/span&gt;
&lt;span class="c1"&gt;//3. Dentro del corchete se agregan los atributos y valores&lt;/span&gt;
&lt;span class="c1"&gt;//4. {atributo1:"valorString",atributo2:true} etc...&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;persona&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;José Luis&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;edad&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;22&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;complexion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Delgada&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;graduado&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;familia&lt;/span&gt;&lt;span class="p"&gt;:[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Chris Evans&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Jason Statham&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;persona&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;El problema de object literal, es que se debe crear una variable por cada objeto que se necesite, pero al menos esa variable ya tiene atributos y funcionalidades asociados.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;| &lt;a href="https://developer.mozilla.org/es/docs/Learn/JavaScript/Objects/Basics" rel="noopener noreferrer"&gt;Documento del tema&lt;/a&gt; | &lt;a href="https://www.youtube.com/watch?v=4xig5UPRC00" rel="noopener noreferrer"&gt;Video-guía&lt;/a&gt; |&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Object constructor
&lt;/h2&gt;

&lt;p&gt;Al igual que object literal, permite crear objetos con distintas propiedades, la diferencia es que este objeto es dinámico, es decir, crear varios objetos que tengan los mismos atributos pero distintos valores.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;Casa&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;precio&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;ubicacion&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;recamaras&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;baños&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;precio&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;precio&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ubicacion&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;ubicacion&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;recamaras&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;recamaras&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;baños&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;baños&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;casa1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Casa&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1000000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Mexico Norte&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;casa2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Casa&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2000000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Mexico Sur&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Precio de la casa1 = $&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;casa1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;precio&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Precio de la casa2 = $&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;casa2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;precio&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;| &lt;a href="https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Objetos_globales/Object/constructor" rel="noopener noreferrer"&gt;Documento del tema&lt;/a&gt; | &lt;a href="https://www.youtube.com/watch?v=4xig5UPRC00" rel="noopener noreferrer"&gt;Video-guía&lt;/a&gt; |&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Prototypes
&lt;/h2&gt;

&lt;p&gt;Es un mecanismo que permite a los objetos heredar atributos y métodos. Es decir... Prototypes = POO.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fcyyf2x962nrfu8iboqgt.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fcyyf2x962nrfu8iboqgt.jpg" alt="meme-js"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;En los puntos anteriores se han visto cosas como objetos con sus propiedades y funciones. Si quisiéramos relacionar esos conceptos a POO, se podría decir que...&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Las propiedades = Atributos&lt;/li&gt;
&lt;li&gt;Funciones = Métodos&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Es muy cierto que ya tenemos las sentencias de &lt;code&gt;class&lt;/code&gt; o &lt;code&gt;extends&lt;/code&gt;, para hacer POO, pero, no significa que el navegador pueda interpretar esas lineas de código, son una forma para nosotros los programadores trabajar más cómodos, pero, tras bambalinas, el interprete esta convirtiendo eso a prototypes.&lt;br&gt;
Aunque no sea necesario seguir usando prototypes (ya tenemos la sintaxis de POO con ES) es importante saber como funciona por debajo esto de los prototypes, no te "precoupes" tanto por este tema (hablando de la gramática) ya que puedes escribir POO usando las sentencias &lt;code&gt;class&lt;/code&gt; &lt;code&gt;extends&lt;/code&gt; sin ningún problema.&lt;/p&gt;

&lt;p&gt;El siguiente código crea una clase, define sus atributos y una instancia de la clase Videojuego.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;Videojuego&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;titulo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;genero&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;consola&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;titulo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;titulo&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;genero&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;genero&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;consola&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;consola&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;nmh3&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Videojuego&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;No More Heroes 3&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Hack &amp;amp; Slash&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Nintendo Switch&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;nmh3&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ahora, para definir sus métodos se utiliza &lt;code&gt;prototype&lt;/code&gt;, de esta forma le indicamos al interprete que ese método le pertenece a la clase que le indiquemos, de esta forma no se hacen varias instancias del método, solo se hace una vez, eso resultaría en tener buen rendimiento si quisiéramos crear 1,000 instancias de videojuegos, ya que el método es el mismo y solo se esta compartiendo.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;Videojuego&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;titulo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;genero&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;consola&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;titulo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;titulo&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;genero&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;genero&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;consola&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;consola&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;Videojuego&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;prototype&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;iniciarPartida&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
    &lt;span class="cm"&gt;/* Algún codigo para validar datos, cargar datos, etc */&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Iniciando &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;titulo&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;, porfavor espere...`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;nmh3&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Videojuego&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;No More Heroes 3&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Hack &amp;amp; Slash&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Nintendo Switch&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;nmh3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;iniciarPartida&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Herencia prototipica - Prototype inheritance
&lt;/h2&gt;

&lt;p&gt;Se trata de, crear una clase que herede ("comparta") los atributos y métodos de otra. De esta forma evitamos hacer copias de los atributos y métodos que ya existen. (Traducido en mal rendimiento y eficiencia)&lt;/p&gt;

&lt;p&gt;1.Se crea la clase y métodos padre&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="cm"&gt;/* CLASE ANIMAL (PADRE) */&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;Animal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;tamano&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;nombre&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;tamano&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;tamano&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="cm"&gt;/* METODOS DE LA CLASE ANIMAL */&lt;/span&gt;

&lt;span class="nx"&gt;Animal&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;prototype&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;comer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Ñam ñam, estoy comiendo`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;Animal&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;prototype&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;dormir&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Zzzz... zzz.... zzz...`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;manchas&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Animal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;manchas&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Pequeno&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;En este caso se tiene a un gato llamado manchas, creado con la clase animal. De igual forma podría crear un método ladrar por si quisiera adoptar un chihuahua y quisiera que haga esa acción, pero esto seria incorrecto.&lt;/p&gt;

&lt;p&gt;¿Por qué? ¿Te imaginas que alguien haga ladrar a manchas por haber hackeado mi código? Te vuelves loco, ¡no se puede!. Los gatos maúllan y los perros ladran, esa una diferencia muy clara. A pesar de que son animales, no todos hacen esas acciones. ¿Cómo resolver esto? Con herencia. Vamos hacer esto.&lt;/p&gt;

&lt;p&gt;2.Crear una clase Gato (Con sus respectivos atributos y métodos)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="cm"&gt;/* CLASE GATO (HIJO) */&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;Gato&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;tamano&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;bigotes&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;super&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Animal&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//Una "variable" que&lt;/span&gt;
    &lt;span class="c1"&gt;//contiene los atributos y metodos de la clase&lt;/span&gt;
    &lt;span class="c1"&gt;//padre&lt;/span&gt;

    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;super&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;tamano&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;//Los atributos que&lt;/span&gt;
    &lt;span class="c1"&gt;//hereda del padre animal seran los parametros&lt;/span&gt;
    &lt;span class="c1"&gt;//que reciba al instanciarse un objeto gato&lt;/span&gt;

    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;bigotes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;bigotes&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//Se agregan los atributos &lt;/span&gt;
    &lt;span class="c1"&gt;//propios de la clase gato&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;3.Hacer que esa clase (Gato) hereden de animal, así mismo crear sus métodos.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;//HERENCIA PROTOTIPADA&lt;/span&gt;
&lt;span class="nx"&gt;Gato&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;prototype&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Animal&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;//GATO&lt;/span&gt;
&lt;span class="c1"&gt;//ES IGUAL A LA CLASE PADRE PARA&lt;/span&gt;
&lt;span class="c1"&gt;//TENER SUS ATRIBUTOS Y METODOS&lt;/span&gt;

&lt;span class="c1"&gt;//Se agregar un método para Gato&lt;/span&gt;
&lt;span class="nx"&gt;Gato&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;prototype&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;maullar&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Miauuuuu miaaaaaaauuuuu`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Con esto, ya puedo hacer que manchas sea un objeto de tipo gato que a su vez comparte características comunes de un animal.&lt;br&gt;
De igual forma puedo crear una clase perro para tener más separadas las características de dichas mascotas. Así evito que el gato ladre o el perro maullé, pero ambos pueden dormir o comer, es normal en ambos. &lt;br&gt;
Vuelvo a repetir, no es necesario programar de esta forma tomando en cuenta lo nuevo que ha traido ES, solo es para tenerlo en consideración&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;| &lt;a href="https://www.digitalocean.com/community/tutorials/understanding-prototypes-and-inheritance-in-javascript#:~:text=JavaScript%20is%20a%20prototype-based,and%20differs%20from%20class%20inheritance." rel="noopener noreferrer"&gt;Documento del tema&lt;/a&gt; | &lt;a href="https://www.youtube.com/watch?v=1-m7xtwvH1E&amp;amp;list=PLvq-jIkSeTUZ6QgYYO3MwG9EMqC-KoLXA&amp;amp;index=24" rel="noopener noreferrer"&gt;Videoguía&lt;/a&gt; |&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Object destructuring
&lt;/h2&gt;

&lt;p&gt;El destructuring hace una copia de los atributos de un objeto. Pero, la copia se hace en una variable distinta por cada atributo encontrado.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SIN DESTRUCTURING&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;persona&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Jose Luis&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;edad&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;22&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;origen&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;MX&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;//A&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;nombre&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;persona&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;edad&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;persona&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;edad&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;origen&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;persona&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;origen&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;El código debajo de &lt;code&gt;A&lt;/code&gt; es necesario para poder guardar los atributos del objeto en variables separadas. Con destructuring nos ahorramos escribir eso. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CON DESTRUCTURING&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;persona&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Jose Luis&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;edad&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;22&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;origen&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;MX&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;edad&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;origen&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;persona&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;La meta es la misma, tenemos las variables &lt;code&gt;edad&lt;/code&gt; , &lt;code&gt;origen&lt;/code&gt; y &lt;code&gt;nombre&lt;/code&gt; por separado. Este concepto es muy importante en React, parece difícil cuando lo ves y no sabes que significa, pero es muy sencillo. &lt;strong&gt;| &lt;a href="https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Operadores/Destructuring_assignment" rel="noopener noreferrer"&gt;Documento del tema&lt;/a&gt; | &lt;a href="https://www.youtube.com/watch?v=YTtZ9TUQ48E&amp;amp;list=PLvq-jIkSeTUZ6QgYYO3MwG9EMqC-KoLXA&amp;amp;index=19" rel="noopener noreferrer"&gt;Video-guía&lt;/a&gt; |&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Object literal enhacement
&lt;/h2&gt;

&lt;p&gt;Es la contraparte de destructuring, su objetivo es agrupar variables para unirlas en una sola, específicamente en un objeto (o arreglo si así lo necesitas).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SIN ENHACEMENT&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;licenciatura&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Ingeniero en Computacion&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;semestre&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;promedio&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;83&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;datosAlumno&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;dato1&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;licenciatura&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;dato2&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;semestre&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;dato3&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;promedio&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;datosAlumno&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;dato1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Como ves, hacerlo de forma manual, sirve, pero si podemos ahorrar escribir en el teclado mejor con enhacement.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CON ENHACEMENT&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;licenciatura&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Ingeniero en Computacion&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;semestre&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;promedio&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;83&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;alumno&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;licenciatura&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;semestre&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;promedio&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;alumno&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;De igual forma, sencillo y muy utilizado en React, pero que causa pánico por saber el detrás de que hace.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Funciones en un objeto&lt;/strong&gt;
Solo para recordar, que los datos de las propiedades también pueden ser funciones
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;consola&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;fabricante&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Nintendo&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;modelo&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Nintendo Switch 1.0&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nf"&gt;banearConsola&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Escanenando Sistema...
        Hacks enconstrados...
        Lo sinto &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;dueno&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;, pero tu consola estara
        baneada por infringir los terminos y condiciones`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;dueno&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Jose Luis&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;consola&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;banearConsola&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;| &lt;a href="https://www.geeksforgeeks.org/javascriptes6-object-literal-enhancement/" rel="noopener noreferrer"&gt;Documento del tema&lt;/a&gt; |&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  .map
&lt;/h2&gt;

&lt;p&gt;Es un método que crea un nuevo arreglo a partir de otro dado como parámetro, opera sobre cada uno de los elementos para dar el nuevo arreglo resultante, con ayuda de una función. Por ejemplo&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;preciosOriginales&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,];&lt;/span&gt;

&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;preciosDescuento&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;preciosOriginales&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;precio&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;precio&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mf"&gt;0.85&lt;/span&gt;&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;preciosOriginales&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;preciosDescuento&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;¿Por qué utilizarlo?&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Permite iterar en cada uno de los elementos con una sintaxis más expresiva que hacerlo con un for, while, etc.&lt;/li&gt;
&lt;li&gt;La operación realizada no cambia el valor del arreglo "original", esto asegura una consistencia de datos. Si no usáramos este método, la variable original se sobre-escribiría.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;| &lt;a href="https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Objetos_globales/Array/map" rel="noopener noreferrer"&gt;Documento del tema&lt;/a&gt; | &lt;a href="https://www.youtube.com/watch?v=FMubfnVET74" rel="noopener noreferrer"&gt;Video-guía&lt;/a&gt; |&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Object keys
&lt;/h2&gt;

&lt;p&gt;Es un método utilizado para los objetos, retorno &lt;strong&gt;el nombre&lt;/strong&gt; de sus propiedades.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;pelicula&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;titulo&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Crank: Alto Voltaje&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;actores&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Jashon Stathamn&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;...&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="na"&gt;genero&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Accion&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;keys&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;pelicula&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No retorna sus valores, sino los nombres de las propiedades, es decir, &lt;code&gt;titulo&lt;/code&gt;,&lt;code&gt;actores&lt;/code&gt; y &lt;code&gt;genero&lt;/code&gt; &lt;strong&gt;| &lt;a href="https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Objetos_globales/Object/keys" rel="noopener noreferrer"&gt;Documento del tema&lt;/a&gt; |&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Spread Operator
&lt;/h2&gt;

&lt;p&gt;Esta expresión permite hacer una copia de una variable. Pero, la copia no se hace por referencia. Por lo que son datos totalmente independientes entre sí, asegurando una consistencia de datos en el código.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;texto&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;1&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;2&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;3&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;4&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;5&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;([...&lt;/span&gt;&lt;span class="nx"&gt;texto&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;reverse&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;span class="c1"&gt;//Imprime: 5,4,3,2,1&lt;/span&gt;

&lt;span class="c1"&gt;//Imprime: 1,2,3,4,5&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;texto&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;| &lt;a href="https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Operadores/Spread_operator" rel="noopener noreferrer"&gt;Documento del tema&lt;/a&gt; | &lt;a href="https://www.youtube.com/watch?v=-Jt_86kUKuk" rel="noopener noreferrer"&gt;Video-guía&lt;/a&gt; |&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  .filter
&lt;/h2&gt;

&lt;p&gt;Método para los arreglos que retorna un nuevo arreglo que cumpla con los criterios impuestos. Un ejemplo sería el siguiente código, que retorna a JoseLuis y Sandra.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;personas&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="na"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;JoseLuis&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="na"&gt;edad&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;22&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="na"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Juan&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="na"&gt;edad&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="na"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Sandra&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="na"&gt;edad&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;26&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;lista&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;personas&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;persona&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;persona&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;edad&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;;});&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;lista&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;| &lt;a href="https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Objetos_globales/Array/filter" rel="noopener noreferrer"&gt;Documento del tema&lt;/a&gt; | &lt;a href="https://www.youtube.com/watch?v=fCvuOyVXUUQ" rel="noopener noreferrer"&gt;Video-guía&lt;/a&gt; |&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  .find
&lt;/h2&gt;

&lt;p&gt;Método para los arreglos que retorna el primero elemento que se busca como criterio. En este ejemplo, busco la propiedad que contenga el valor "JoseLuis".&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;personas&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="na"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;JoseLuis&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="na"&gt;edad&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;22&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="na"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Juan&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="na"&gt;edad&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="na"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Sandra&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="na"&gt;edad&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;26&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;lista&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;personas&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;persona&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;persona&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;nombre&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;JoseLuis&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;});&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;lista&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;| &lt;a href="https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Objetos_globales/Array/find" rel="noopener noreferrer"&gt;Documento del tema&lt;/a&gt; |&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  .reduce
&lt;/h2&gt;

&lt;p&gt;.reduce recibe dos parametros:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Una función llamada &lt;code&gt;reducer&lt;/code&gt; (Es decir, un callback como primer parámetro)
&lt;code&gt;reducer&lt;/code&gt; recibe...

&lt;ol&gt;
&lt;li&gt;Como primer parámetro un &lt;code&gt;acumulador&lt;/code&gt; &lt;/li&gt;
&lt;li&gt;El segundo parámetro el &lt;code&gt;elemento&lt;/code&gt; que se esta iterando. Esto debe regresar el nuevo acumulador que se va a pasar como argumento la siguiente vez que se llame la función &lt;code&gt;reducer&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;

&lt;li&gt;El segundo parametro, es el valor inicial que va a tener el acumulador.&lt;/li&gt;

&lt;/ol&gt;

&lt;p&gt;Un ejemplo de esto seria...&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;reducido&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;reduce&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;acumulador&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;elemento&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;acumulador&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;elemento&lt;/span&gt;&lt;span class="p"&gt;;},&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;reducido&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;| &lt;a href="https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Objetos_globales/Array/reduce" rel="noopener noreferrer"&gt;Documento del tema&lt;/a&gt; | &lt;a href="https://www.youtube.com/watch?v=0y5lXGYMEw0" rel="noopener noreferrer"&gt;Vide-guía&lt;/a&gt; |&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Síncrono vs Asíncrono
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Javascript = Asincrono&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Antes de seguir, vienen cosas que dependen saber lo siguiente: que &lt;strong&gt;Javascript es asíncrono y concurrente&lt;/strong&gt; , si ya sabes que es esto y lo que implica, puedes saltarte este texto, de lo contrario, sigue el hilo.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Síncrono&lt;/th&gt;
&lt;th&gt;Asíncrono&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;El código ejecuta las intrucciones de forma ordenada una a una, y , solo se ejecutan cuando las líneas anteriores han terminado de computar/realizar su tarea&lt;/td&gt;
&lt;td&gt;El código ejecuta las instrucciones, de forma ordenada una a una, pero, no espera a que las líneas anteriores terminen de computar/realizar su tarea&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Entonces... ¿Javascript es asíncrono? &lt;strong&gt;Si&lt;/strong&gt;. Bueno ¿y eso en que afecta al nieto de Maribel Guardia o porque me debe importar saber eso?. Hasta este punto, ya sabes lo que implica un lenguaje asíncrono, vamos a poner un ejemplo para que veas sus "inconveniente".&lt;/p&gt;

&lt;p&gt;► &lt;strong&gt;Ejemplo de la vida real&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Digamos que estas practicando desarrollo web y quieres cargar las imágenes de un servidor ajeno al tuyo para darle un estilo de tipo tarjeta, animaciones, etc. &lt;/p&gt;

&lt;p&gt;Lo normal sería&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Cargar las imágenes del servidor externo&lt;/li&gt;
&lt;li&gt;Mostrar las imágenes&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Por factores ajenos al tuyo (internet, clima,etc), sabes que las fotografías no cargan al instante, normal. En fin, este es tu código...&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;cargarImagenes&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`1. Cargando imagenes... Porfavor espera`&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;//Set timeout simula ese retraso de carga&lt;/span&gt;
    &lt;span class="nf"&gt;setTimeout&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`2. Imagenes cargadas!
        Ya puedes manipular la informacion`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="mi"&gt;5000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;mostrarImagenes&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`3. ERROR: No han terminado de cargar las imagenes!
    Imposible de agregar al DOM si no existen`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;cargarImagenes&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nf"&gt;mostrarImagenes&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Y cuando lo ejecutas...&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Ftemz9i1g06h267cocm7t.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Ftemz9i1g06h267cocm7t.PNG" alt="Captura"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Exacto, el código &lt;code&gt;mostrarImagenes()&lt;/code&gt; se ejecuta sin haber esperado a que &lt;code&gt;cargarImagenes()&lt;/code&gt; terminara su ejecución ¿Por qué sucede esto? Porque JS es asíncrono. Esa misma razón hace que el código de ejemplo no funcione como uno esperaría.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Javascript = Concurrente&lt;/strong&gt;&lt;br&gt;
Con concurrente nos referimos a que el lenguaje solo es capaz de realizar una instrucción a la vez. Algunos, como Java, permiten computar varias tareas a la vez, todo dependiendo de la arquitectura la computadora. Nuestro protagonista lastimosamente no lo puede hacer. Y debe quedar muy claro esto, ya que existen nuevas mejoras al lenguaje que hacen lucir a JS como un lenguaje que puede hacer paralelismo (ejecutar varias instrucciones a la vez), así que no te dejes engañar.&lt;/p&gt;

&lt;p&gt;Cof cof &lt;code&gt;Promise.all([])&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;| &lt;a href="https://medium.com/laboratoria-how-to/programacion-asincrona-cea3bad7c3c6#:~:text=S%C3%ADncrono%20vs%20As%C3%ADncrono&amp;amp;text=Un%20c%C3%B3digo%20s%C3%ADncrono%20es%20aquel,y%20contin%C3%BAa%20con%20su%20ejecuci%C3%B3n." rel="noopener noreferrer"&gt;Documento del tema&lt;/a&gt; | &lt;a href="https://www.youtube.com/watch?v=PndHsDpEfhU" rel="noopener noreferrer"&gt;Video-guía&lt;/a&gt; |&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Callbacks
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Contexto&lt;/strong&gt;. Retomando el ejemplo del punto anterior.&lt;br&gt;
Nos vemos en aprietos, ¿cómo solucionamos ese problema? Es un hecho que debemos hacer en orden las tareas y que estas terminen para poder seguir avanzando en las siguiente lineas de ejecución, pero el lenguaje es asincronico, parece que no hay salida. ¿O sí? Los callback...&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;¿Qué es un callback?&lt;/strong&gt;&lt;br&gt;
Una función de callback es una función que se pasa a otra función como un argumento, que luego se invoca dentro de la función externa para completar algún tipo de rutina o acción.&lt;/p&gt;

&lt;p&gt;¡Bien! Entonces usemos el callback para ajustar el código y funcione como uno esperaría.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;cargarImagenes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;callback&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`1. Cargando imagenes... Porfavor espera`&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;//Set timeout simula ese retraso de carga&lt;/span&gt;
    &lt;span class="nf"&gt;setTimeout&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`2. Imagenes cargadas!
        Ya puedes manipular la informacion`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="nf"&gt;callback&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="mi"&gt;5000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;mostrarImagenes&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`3. Exito: Clic para ver fotos`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;cargarImagenes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;mostrarImagenes&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Si ejecutamos esto en el navegador...&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F9u9t0uvlzmprxiinft3d.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F9u9t0uvlzmprxiinft3d.PNG" alt="Captura2"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;¡Boom! Se respetó el orden de ejecución. Paso 1, Paso 2 y por último Paso 3.&lt;br&gt;
De igual forma, podemos crear mas funciones, pasarlas como parámetro una función y anidarlas al "bloque inicial". Esto funcionaría sin problema para cualquier situación.&lt;/p&gt;

&lt;p&gt;Pero, que sucedería, su tuviéramos que hacer algo como esto...&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Conectarse al servidor y esperar su respuesta 200&lt;/li&gt;
&lt;li&gt;Buscar el usuario en la BD&lt;/li&gt;
&lt;li&gt;Extraer los datos del usuario&lt;/li&gt;
&lt;li&gt;Buscar información con base los criterios del usuario&lt;/li&gt;
&lt;li&gt;Etc...&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Sin duda, habrán muchas funciones, pero no solo eso, también tendríamos que codificar con un &lt;code&gt;if&lt;/code&gt; los casos si llega a haber un error (Facebook se cae, el internet del usuario se va, etc).&lt;/p&gt;

&lt;p&gt;El punto, es que nuestro código al final luciría algo como esto. Callback hell&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F2400%2F0%2AiiecmuTLPBqbxd5V.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F2400%2F0%2AiiecmuTLPBqbxd5V.jpeg" alt="Imagen de un Callback hell en Javascript"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Difícil de leer y de mantener, una solución que cumple su objetivo, pero demasiado primitiva.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;| &lt;a href="https://developer.mozilla.org/es/docs/Glossary/Callback_function" rel="noopener noreferrer"&gt;Documento del tema&lt;/a&gt; | &lt;a href="https://www.youtube.com/watch?v=M6i4CTWmVqc" rel="noopener noreferrer"&gt;Video-guía&lt;/a&gt; |&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Promesas
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;¿Qué es una promesa?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Es un objeto que representa la terminación o el fracaso de una operación asíncrona. Es decir, se ejecuta una serie de instrucciones, y, dependiendo de los resultados que se computen. Recibimos el dato que esperamos (terminación) o el fracaso (error de lo que sucedió). Son útiles cuando queremos hacer un comportamiento sincrono y evitar el callback hell.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sintaxis para una promesa&lt;/strong&gt;&lt;br&gt;
Pongamos una situación. Yo tengo la siguiente serie de datos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;trabajos&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="na"&gt;trabajo&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Freelance&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="na"&gt;trabajo&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Docente&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="na"&gt;trabajo&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;escuela de la calle&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;personas&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="na"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Jose Luis&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="na"&gt;edad&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;22&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="na"&gt;trabajo_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="na"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Juan&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="na"&gt;edad&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;22&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="na"&gt;trabajo_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="na"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Martin&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="na"&gt;edad&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="na"&gt;trabajo_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="na"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Danilo&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="na"&gt;edad&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="na"&gt;trabajo_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Lo que necesito es consultar una Base de Datos para ver la información de las personas, y, en base al &lt;code&gt;trabajo_id&lt;/code&gt; revisar dichos datos. Como puedes observar, son datos que dependen uno del otro para lograr mi cometido. Pero me rehusó a usar callbacks, asi que uso promesas. &lt;strong&gt;¿Cómo empiezo?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1)&lt;/strong&gt; Defino las funciones que requiero para obtener la información que necesito, pero con una sintaxis particular.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fknbvqk4n2z23te5hy1xr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fknbvqk4n2z23te5hy1xr.png" alt="Editable"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Siguiendo la imagen, mi código quedaría algo así. (Por ahora).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;obtenerPersonas&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;resolved&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;reject&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nf"&gt;setTimeout&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nf"&gt;resolved&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;personas&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;buscarPersona&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;typeof&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;!==&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;number&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;reject&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;No puedes poner textos&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;resolved&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;reject&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nf"&gt;setTimeout&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;persona&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;personas&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;persona&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;persona&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;})[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
            &lt;span class="nf"&gt;resolved&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;persona&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;buscarTrabajo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;idTrabajoPersona&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;resolved&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;reject&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nf"&gt;setTimeout&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;trabajo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;trabajos&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;find&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;trabajo&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;trabajo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;idTrabajoPersona&lt;/span&gt;&lt;span class="p"&gt;});&lt;/span&gt;
            &lt;span class="nf"&gt;resolved&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;trabajo&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Antes de avanzar, &lt;code&gt;resolved(miDatoComputado)&lt;/code&gt; es la forma de capturar la promesa en caso de que sea exitosa.&lt;br&gt;
¿Pero que pasa si falla? (Cuestiones de internet, la api ya no existe, los datos no son correctos, etc). Podemos hacer un return de &lt;code&gt;Promise.reject&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fdhc0d17ti6inkz2nedm5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fdhc0d17ti6inkz2nedm5.png" alt="Editable 2"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2)&lt;/strong&gt; Ejecuto mis promesas de la siguiente manera&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fjp5eukesijhszhn0hnpb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fjp5eukesijhszhn0hnpb.png" alt="Editable 3"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Quedando algo asi...&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;idBusqueda&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nf"&gt;obtenerPersonas&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;personas&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;buscarPersona&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;idBusqueda&lt;/span&gt;&lt;span class="p"&gt;)})&lt;/span&gt;

&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;persona&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`La persona es &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;persona&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;nombre&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; y su id de trabajo es &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;persona&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;trabajo_id&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; 
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;buscarTrabajo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;persona&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;trabajo_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;then&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;trabajo&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;trabajo&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Como puedes ver, la sintaxis es mas legible que teniendo una pirámide, y, la ventaja, es que puedo manejar todos los errores que tenga el proceso con &lt;code&gt;catch&lt;/code&gt;, ya sea en &lt;code&gt;buscarTrabajo()&lt;/code&gt; , &lt;code&gt;buscarPersona()&lt;/code&gt;, claro, debo programar los posibles errores que existan, pero ya no tengo que poner varios catch por cada uno&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fys8uc7qs4gdtpbp80q5h.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fys8uc7qs4gdtpbp80q5h.PNG" alt="promises"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;¡Excelente! Las canas que me podría haber sacado con los callbacks, los evite usando promesas. Podrías pensar que ya no debes utilizar callbacks, ya que estos "hacen lo mismo" de mejor manera. Pero todo depende del uso.&lt;/p&gt;

&lt;p&gt;Cuando son muy pocas instrucciones no pasa nada al usar callbacks&lt;/p&gt;

&lt;p&gt;Cuando son muchas instrucciones, el mejor aliado son promesas&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;| &lt;a href="https://es.stackoverflow.com/questions/64265/qu%C3%A9-es-una-promesa-en-javascript" rel="noopener noreferrer"&gt;Documento del tema&lt;/a&gt; | &lt;a href="https://www.youtube.com/watch?v=xHmdZYHLaKo" rel="noopener noreferrer"&gt;Video-guía&lt;/a&gt; |&lt;/strong&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Async/Await
&lt;/h1&gt;

&lt;p&gt;Esta funcionalidad es algo reciente, no llegó para remplazar a las promesas, si no a complementarlas trabajando en conjunto.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;¿Qué es Async/Await?&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Estas características, básicamente, actúan como azúcar sintáctico, haciendo el código asíncrono fácil de escribir y leer más tarde. Hacen que el código asíncrono se parezca más al código síncrono de la vieja escuela, por lo que merece la pena aprenderlo. &lt;em&gt;-Mozilla Firefox&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Como puedes leer, es una sintaxis que nos facilita aun más la implementación de código sincrono&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fsolc6ykht0qxfy1rz6vr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fsolc6ykht0qxfy1rz6vr.png" alt="meme-asyncawait"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Para facilitar el ejemplo , se va implementar un código sencillo, pero ya sabes que puedes ir a cosas mas difíciles como consultar un API. &lt;strong&gt;¿Cómo inicio?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1)&lt;/strong&gt; Se debe crear la función promesa que nos promete regresar algo.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;suma&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;numero&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;reject&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nf"&gt;setTimeout&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nf"&gt;resolve&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;numero&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;48&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="mi"&gt;2000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nada nuevo, esto se abarcó en el punto de promesas. Se realiza una suma después un delay de 2 segundos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2)&lt;/strong&gt; Escribir la función async&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F4q5b07dl9dkdsz89j4y9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F4q5b07dl9dkdsz89j4y9.png" alt="sintaxis async"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;tareaAsincrona&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
    &lt;span class="cm"&gt;/* Algún código de hacker */&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;3)&lt;/strong&gt; Dentro de la función, se abre un &lt;code&gt;try catch&lt;/code&gt; (opcional). En la parte del &lt;code&gt;try&lt;/code&gt; se manejan todas las promesas que uno quiera realizar. Usando la palabra reservada &lt;code&gt;await&lt;/code&gt; al lado izquierdo de la función. De esta forma le indicamos que debe esperar a que termine la ejecución para seguir avanzando a las siguientes líneas. Y... es todo ¿sencillo no?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fyliyfmsfucb4tw0y5vl1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fyliyfmsfucb4tw0y5vl1.png" alt="sintaxis await"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;tareaAsincrona&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
    &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;paso1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;suma&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;paso1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;¿Si notas que estoy guardado la promesa en una variable?&lt;br&gt;
Bueno... Es por algo&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ventajas de async/await&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Es azúcar sintáctico, hacer código sincrono se hace mas sencillo con esta gramática de ES&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Permite guardar los valores de las promesas&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Como vez, es un complemento de las promesas. Los 3 conceptos de &lt;code&gt;callbacks&lt;/code&gt; , &lt;code&gt;promises&lt;/code&gt; y &lt;code&gt;async/await&lt;/code&gt; pueden llegar a ser confusos, más que nada porque son conceptos que se derivan de otro. Es por eso, que yo sugiero investigar en orden esos temas, de lo contrario no te sonara muy claro lo que llegues a encontrar de información.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fxg0licdwg4oyfwn8032a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fxg0licdwg4oyfwn8032a.png" alt="los-3-pilares"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;| &lt;a href="https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Sentencias/funcion_asincrona" rel="noopener noreferrer"&gt;Documento del tema&lt;/a&gt; | &lt;a href="https://www.youtube.com/watch?v=E5ENWEcoDdI&amp;amp;t=634s" rel="noopener noreferrer"&gt;Video-guía&lt;/a&gt; |&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  POO
&lt;/h2&gt;

&lt;p&gt;Esto si es importante saberlo. Le pongo de tema "POO" para hacer referencia a las palabras reservadas &lt;code&gt;class&lt;/code&gt; &lt;code&gt;extends&lt;/code&gt; &lt;code&gt;new&lt;/code&gt;, es decir, la gramática tradicional que la mayoría conocemos o nos suena. Para este punto no voy a meterme muy a fondo para el código ya que es un tema "complejo". Si nunca has usado este paradigma , te recomiendo este vídeo para que comprendas los conceptos que son pilares del paradigma y después practicarlo &lt;strong&gt;| &lt;a href="https://www.youtube.com/watch?v=DlphYPc_HKk" rel="noopener noreferrer"&gt;Video-guía&lt;/a&gt; |&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;También dejare un pequeño resumen de los conceptos que deben considerarse para este paradigma así como algún recurso practico (De Javascript) para que se mejor comprendido dicho concepto. (Algunos recursos pueden estar en ingles). Cabe aclarar, que la implementacion de este paradigma (hablando de la codificación) varia en cada lenguaje, algunos tienen más o menos palabras reservadas, otros permiten mas características, etc. Pero los conceptos son los mismos.  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Abstracción&lt;/strong&gt;: Se refiere a "abstraer" (extraer) las características de un objeto que conocemos a manera de código. Se trata de obtener la información &lt;strong&gt;necesaria&lt;/strong&gt; para nuestro propósito en la implementan. Por ejemplo, un Nintendo Switch, podríamos decir que tiene un procesador, ram, memoria, slots, batería, etc. Pero eso no nos va, probablemente no terminemos usando toda esa información y solo lía mas el proyecto, mejor, podemos decir, capacidad de memoria y modelo. De igual forma con sus funciones, decimos que realiza conexión a internet, transferencia de datos, configuración de sistema, etc. Pero volvemos a lo mismo, &lt;strong&gt;abstraemos&lt;/strong&gt; todo lo que podamos para no complicarnos demasiado.&lt;/li&gt;
&lt;/ul&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Encapsulamiento&lt;/strong&gt;: Con esto protegemos la información de los objetos, de forma que sus atributos no puedan ser manipulados por otros objetos. De esta forma hay integridad de la información y sobre todo &lt;strong&gt;seguridad&lt;/strong&gt;. Por ejemplo, un sistema en donde el objeto usuarioJoseLuis interactua con una tienda online, y por algun bug, el carrito de compras intenta sobreescribir mi informacion, entre ella la contraseña de mi cuenta. &lt;strong&gt;ERROR FATAL&lt;/strong&gt; (Nota: En Javascript "no" hay implementación de dicho concepto)&lt;/li&gt;
&lt;/ul&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Herencia&lt;/strong&gt;: La herencia toma como referencia una clase, y, a partir de eso, se agregan los atributos y métodos propios. Es una forma extender la plantilla partiendo de otra, dando una variante.
Por ejemplo, los perros, son animales. PERO, no puedo generalizar un perro con el resto de animales que hay, porque son distintos sin duda alguna, no es comparable un pájaro contra un perro, ambos comen o duermen, pero de ahí en fuera, muy opuestos.
Es por eso, que parto de la plantilla &lt;code&gt;Animal&lt;/code&gt; que engloba cosas comunes de los animales, para dar definiciones propias a un perro, gato, etc.
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Animal&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;tipo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;tamano&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;habitat&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;tipo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;tipo&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;tamano&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;tamano&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;habitat&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;habitat&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="nf"&gt;comer&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Ñom ñom ñom`&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Perro&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;Animal&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;tipo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;tamano&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;habitat&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;raza&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
        &lt;span class="k"&gt;super&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;tipo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;tamano&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;habitat&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;raza&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;raza&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="nf"&gt;ladrar&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`GUA GUA GUA!!! Soy un &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;raza&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;perro&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Perro&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Canino&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Grande&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Ciudad&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Chihuahua&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nx"&gt;perro&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ladrar&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Código largo, pero puedes observar, que a partir de los animales, pude crear la clase (plantilla) Perro con la información que define perfectamente a un perro. Y lo podria hacer de igual forma para otros más.&lt;/p&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Polimorfismo&lt;/strong&gt;: Es el distinto comportamiento de un método según los atributos de un objeto. Por ejemplo, los perros ladran, pero un chihuahua puede ladrar menos fuerte que uno grande.
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Animal&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;tipo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;tamano&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;habitat&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;tipo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;tipo&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;tamano&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;tamano&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;habitat&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;habitat&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="nf"&gt;comer&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Ñom ñom ñom`&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Perro&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;Animal&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;tipo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;tamano&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;habitat&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;raza&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
        &lt;span class="k"&gt;super&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;tipo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;tamano&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;habitat&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;raza&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;raza&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="nf"&gt;ladrar&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;tamano&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Grande&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`GUA GUA GUA!!! Soy un &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;raza&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; y ladro fuerte`&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`gua gua. Soy un &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;raza&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; y ladro bajito`&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;puchin&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Perro&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Canino&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Grande&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Ciudad&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Husky&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nx"&gt;puchin&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ladrar&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;mazapan&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Perro&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Canino&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Pequeño&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Ciudad&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Chihuahua&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nx"&gt;mazapan&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ladrar&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F62lszm2g4w2kst36kgb6.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F62lszm2g4w2kst36kgb6.PNG" alt="polimorfismo"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Misma acción, pero con una variante en el comportamiento por los atributos del objeto &lt;/p&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Objeto | &lt;a href="https://www.kikopalomares.com/blog/que-es-un-objeto-en-programacion" rel="noopener noreferrer"&gt;Video-guía&lt;/a&gt; |&lt;/strong&gt;: Corresponde a una unidad dentro de la informática que contiene un estado y un comportamiento. Es decir, es la creación de algo "real" dentro del sistema informático, tomando como referencia la abstracción de una clase (molde) para su creación
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;perro&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Animal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Canino&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Grande&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Ciudad&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Suponiendo que ya tengo las clases creadas, yo puedo hacer múltiples objetos que sean considerados Animales. Transformar ese concepto a algo real en el código es lo que se conoce como objeto&lt;/p&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Propiedades&lt;/strong&gt;: Se refiere a las características de un objeto, si hablamos de una consola de videojuegos, hablamos del skin, modelo, nombre, etc.
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Animal&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;tipo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;tamano&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;habitat&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;tipo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;tipo&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;tamano&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;tamano&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;habitat&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;habitat&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Las características del animal, tipo, tamaño y habitat. Como tal son cosas que lo describen&lt;/p&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Método&lt;/strong&gt;: Va de la mano con los objetos, y es todo lo que puede hacer dicho objeto (las acciones/funciones), un gato por ejemplo, puede maullar, rasguñar, etc.
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Animal&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;tipo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;tamano&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;habitat&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
        &lt;span class="c1"&gt;//ALGUN CODIGO&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="nf"&gt;comer&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Ñom ñom ñom`&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Comer es mi método, es una acción que puede realizar el animal. Esto es muy abstracto, pero se entiende la idea. Podría sumar, restar, multiplicar o lo que mi objeto puede hacer a nivel de "código".&lt;/p&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Clase | &lt;a href="https://www.kikopalomares.com/blog/que-es-una-clase-en-programacion" rel="noopener noreferrer"&gt;Video-guía&lt;/a&gt; |&lt;/strong&gt;: Es un molde que define como se debe de crear el objeto, sus propiedades(datos/atributos) y métodos(acciones/funciones).
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Animal&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;tipo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;tamano&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;habitat&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;tipo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;tipo&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;tamano&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;tamano&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;habitat&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;habitat&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="nf"&gt;comer&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Ñom ñom ñom`&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Como se observa, ese es código para la clase. La cual me indica los "lineamientos" para crear animales.&lt;/p&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Constructor | &lt;a href="https://www.kikopalomares.com/blog/que-es-un-constructor-en-programacion" rel="noopener noreferrer"&gt;Video-guía&lt;/a&gt; |&lt;/strong&gt;  : Es un método de las clases, que le permite (como su nombre lo dice) construir el objeto una vez que este se instancia (se manda crear con la plantilla). Un Animal por ejemplo, por default son de un tipo, de un tamaño y pertenecen a un habitat, sin esta informacion... No tenemos nada :(
El ahí de por que se incluye el método constructor en las clases
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Animal&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;tipo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;tamano&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;habitat&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;tipo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;tipo&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;tamano&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;tamano&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;habitat&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;habitat&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="nf"&gt;comer&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Ñom ñom ñom`&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;




&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Getter | &lt;a href="https://www.youtube.com/watch?v=bl98dm7vJt0" rel="noopener noreferrer"&gt;Video-guía&lt;/a&gt; |&lt;/strong&gt;: Su nombre es muy descriptivo, &lt;strong&gt;es un método se encarga de extraer la información de un objeto&lt;/strong&gt;. Has leído bien, un método.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;1)&lt;/strong&gt; Se define un método dentro de la clase, anteponiendo la palabra reservada &lt;code&gt;get&lt;/code&gt;. Este método puede hacer una serie de cálculos y retornar al final ese resultado.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2)&lt;/strong&gt; Se obtiene la información del objeto poniendo el nombre del objeto, seguido de un punto y el nombre del método getter&lt;br&gt;
&lt;code&gt;nombreObjeto.nombreMetodoGetter&lt;/code&gt;. Asi se puede utilizar esa información para realizar alguna operación, mostrar en pantalla etc.&lt;/p&gt;

&lt;p&gt;La pregunta es ¿por qué hacerlo así? Por que así podemos controlar el acceso de la información. Tal vez queramos que no toda la información se accesible, solo alguna.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Animal&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;//ALGUN CODIGO&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Perro&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;Animal&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;tipo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;tamano&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;habitat&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;raza&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
        &lt;span class="c1"&gt;//ALGUN CODIGO&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="kd"&gt;get&lt;/span&gt; &lt;span class="nf"&gt;ladrar&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;tamano&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Grande&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s2"&gt;`GUA GUA GUA!!! Soy un &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;raza&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; y ladro fuerte`&lt;/span&gt;
        &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s2"&gt;`gua gua. Soy un &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;raza&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; y ladro bajito`&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;mazapan&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Perro&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Canino&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Pequeño&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Ciudad&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Chihuahua&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;mazapan&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ladrar&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Setter | &lt;a href="https://www.youtube.com/watch?v=bl98dm7vJt0" rel="noopener noreferrer"&gt;Video-guía&lt;/a&gt; |&lt;/strong&gt;: Su nombre es muy descriptivo, &lt;strong&gt;es un método se encarga de cambiar la información de un objeto&lt;/strong&gt;. Has leído bien, un método.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;1)&lt;/strong&gt; Se define un método dentro de la clase, anteponiendo la palabra reservada &lt;code&gt;set&lt;/code&gt;. Este método puede hacer una serie de cálculos y cambiar algún atributo del objeto  con ese dato.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2)&lt;/strong&gt; Se obtiene cambia la informacion del objeto poniendo el nombre del objeto, seguido de un punto, el nombre del método setter, igualado al nuevo valor&lt;br&gt;
&lt;code&gt;nombreObjeto.nombreMetodoSetter = valorNuevo/DatoNuevo&lt;/code&gt;. Así se puede utilizar esa información para realizar alguna operación, mostrar en pantalla etc.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Animal&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;//ALGUN CODIGO&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Perro&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;Animal&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;tipo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;tamano&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;habitat&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;raza&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
        &lt;span class="k"&gt;super&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;tipo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;tamano&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;habitat&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;raza&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;raza&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="kd"&gt;get&lt;/span&gt; &lt;span class="nf"&gt;ladrar&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;tamano&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Grande&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s2"&gt;`GUA GUA GUA!!! Soy un &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;raza&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; y ladro fuerte`&lt;/span&gt;
        &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s2"&gt;`gua gua. Soy un &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;raza&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; y ladro bajito`&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;set&lt;/span&gt; &lt;span class="nf"&gt;setearTamano&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;valor&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
        &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;tamano&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;valor&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;mazapan&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Perro&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Canino&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Pequeño&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Ciudad&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Chihuahua&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nx"&gt;mazapan&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setearTamano&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Grande&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;mazapan&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ladrar&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;¿Lo ves?, Mi chihuahua iba a ladrar bajito inicialmente, pero al setear su propiedad tamaño, modifique su comportamiento.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fojkj9q2bytbfdg3wkbkf.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fojkj9q2bytbfdg3wkbkf.PNG" alt="setter"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;static&lt;/strong&gt;: Es una forma de acceder al método(función) de una clase sin la necesidad de instanciar(crear) un objeto.
Se antepone la palabra reservada &lt;code&gt;static&lt;/code&gt; antes del nombre del método.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Animal&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;tipo&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;tamano&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;habitat&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
        &lt;span class="c1"&gt;//CODIGO&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="nf"&gt;dormir&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s2"&gt;`Zzzzz.... zzz.... zz..`&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;De esa forma ya puedo utilizar &lt;code&gt;dormir()&lt;/code&gt; sin necesidad de crear algún animal.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Animal&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dormir&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bien, hasta este punto ya se hizo un "refresh" de los conceptos, pero lo ideal seria tener algo de practica&lt;br&gt;
Asi que esta video-guía te resultara util para arrastrar las manos sobre el teclado&lt;br&gt;
&lt;strong&gt;| &lt;a href="https://www.youtube.com/watch?v=Ql6XJpZqM9E" rel="noopener noreferrer"&gt;Video-guía&lt;/a&gt; |&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Exportar e Importar en Javascript
&lt;/h2&gt;

&lt;p&gt;Es bien sabido que si queremos utilizar varios scripts en una pagina web el siguiente código es una opción.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;script&lt;/span&gt; &lt;span class="nx"&gt;src&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;js/geolocalizacion.js&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/script&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;script&lt;/span&gt; &lt;span class="nx"&gt;src&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;js/conversorPDF.js&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/script&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;script&lt;/span&gt; &lt;span class="nx"&gt;src&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;js/chatRealTime.js&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/script&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;El detalle de eso es lo siguiente&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Se realizan multiples peticiones HTTP al servidor para descargar ese script y utilizarlo&lt;/li&gt;
&lt;li&gt;El orden de los scripts debe estar correctamente, es decir, si un script depende de otro por sus variable, ponerlos en orden invertido haría explotar el código en errores, tal vez 2 o 3 archivos no sean la gran cosa. Pero que sucedería su llegasen a ser mas de la cuenta&lt;/li&gt;
&lt;li&gt;Hacer cambios para quitar o agregar scripts seria un proceso manual, imagina tener 20 archivos html y tener que quitar un script por que ahora se deve actualizar la libreria por una mas reciente. Que tedioso y cansado trabajo&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Entonces, si no se puede hacer eso porque es "mala practica". ¿Cómo debería utilizar el archivo JS de la pagina/app web?&lt;br&gt;
De esta forma&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;script&lt;/span&gt; &lt;span class="nx"&gt;src&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;js/main.js&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/script&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Tal vez ya te ha sonado ese archivo cuando inspeccionas algún proyecto ajeno o en practicas mas avanzadas de JS, y la razón de esto es la siguiente.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Solo se utiliza una petición HTTP al servidor para obtener la programación del sitio, eso se traduce en ahorrar recursos.&lt;/li&gt;
&lt;li&gt;El orden de los scripts "ya no se hace", ese dolor de cabeza "ya no existe".&lt;/li&gt;
&lt;li&gt;La programación esta modularizada y más ordenada, &lt;code&gt;main.js&lt;/code&gt; se compone internamente de los demás scripts necesarios para funcionar, la cosa es que la programación no esta en un solo archivo, si no segmentada según la funcionalidad de cada uno.
Es aquí donde entra el tema de &lt;strong&gt;exports&lt;/strong&gt; e &lt;strong&gt;imports&lt;/strong&gt;.
Para entenderlo mejor, un ejemplo practico.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;La idea, es tener lo siguiente en el HTML&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fzp4kr2sg43y4xh7ngfas.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fzp4kr2sg43y4xh7ngfas.png" alt="Ejemplo de modularizacion JS (1)"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;main.js&lt;/code&gt; contiene todos los archivos para mi HTML Calculadora&lt;/p&gt;

&lt;p&gt;¿Ya entiendes la idea? De esta forma se tiene mas control del código requerido en el HTML. Vamos a ver esto de manera practica.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1)&lt;/strong&gt; En el archivo HTML se debe incluir el script para el proyecto. Y, para poder utilizar las palabras reservadas &lt;code&gt;import&lt;/code&gt; &lt;code&gt;export&lt;/code&gt; debemos incluir la etiqueta &lt;code&gt;type="module"&lt;/code&gt; para que sea reconocible por el navegador. Nos quedaría algo así&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;script&lt;/span&gt; &lt;span class="nx"&gt;src&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;js/main.js&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="nx"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;module&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/script&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;2)&lt;/strong&gt; Exportar los scripts&lt;/p&gt;

&lt;p&gt;(Para la calculadora básica, mi código puede ser el siguiente)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="cm"&gt;/* CALCULADORA_BASICA.JS */&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;suma&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;numero&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;numero&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;restar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;numero&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;numero&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;multiplicacion&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;numero&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;numero&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;division&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;numero&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;numero&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Excelente, tengo el código ¿pero como hacer la exportación?. Bueno, hay muchas formas de hacer la exportación.&lt;br&gt;
A continuación las distintas formas.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;FORMA 1&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Se antepone la palabra reservada &lt;code&gt;export&lt;/code&gt; a las funciones y variables
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;numeros&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;suma&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;numero&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;numero&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;restar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;numero&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;numero&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;FORMA 2&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Se crea un objeto que contenga atributos, los valores de los atributos corresponden a las variables y funciones. Al objeto se le antepone la palabra &lt;code&gt;export&lt;/code&gt;, de esta forma no hay que hacerlo para cada uno de los elementos.
Es decir, el código se vería como normalmente uno programaría
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;numeros&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;suma&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;numero&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;numero&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;restar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;numero&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;numero&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="c1"&gt;// . . .&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Y, el objeto luciría de esta manera&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;exportacion&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;suma&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nx"&gt;suma&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;restar&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nx"&gt;restar&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;numeros&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nx"&gt;numeros&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;FORMA 3&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;La otra forma de hacer la exportación, es anteponiendo la palabra reservada &lt;code&gt;default&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;exportacion&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;suma&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nx"&gt;suma&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;restar&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nx"&gt;restar&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;numeros&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nx"&gt;numeros&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;exportacion&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;De esta forma se reconoce casi por automático todo lo necesario al importar dicho script.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NOTA&lt;/strong&gt;: Solo se puede utilizar &lt;code&gt;export default&lt;/code&gt; una vez por archivo js.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;3)&lt;/strong&gt; Importar los scripts al archivo principal. Existen varias formas de hacer esto.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;FORMA 1&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Object destructuring, la sintaxis es &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Palabra reservada -&amp;gt;&lt;code&gt;import&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Destructuring de las funciones y variables -&amp;gt; &lt;code&gt;{ . . . }&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Palabra reservada &lt;code&gt;from&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;String con la ruta del script&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Por ejemplo, para importar mi calculadora basica al archivo principal seria así.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;numeros&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;suma&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;restar&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./CALCULADORA_BASICA.js&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;suma&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;De esta forma pude acceder a la función suma "sin tenerla" declarada en el archivo principal&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;FORMA 2&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;SOLO SI intentas importar un script que tiene una exportación de tipo  &lt;code&gt;export default&lt;/code&gt; (que normalmente son objetos, pero también puede ser variables o funciones) se hace de la siguiente manera.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Palabra reservada -&amp;gt;&lt;code&gt;import&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Algun nombre para distinguir ese export default&lt;/li&gt;
&lt;li&gt;Palabra reservada &lt;code&gt;from&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;String con la ruta del script&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;En mi caso, el código sería así (en caso de exportar un objeto)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import basica from './CALCULADORA_BASICA.js';
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Y, para utilizar el código que contiene &lt;code&gt;CALCULADORA_BASICA.js&lt;/code&gt; solo hago uso de sus variables o funciones como si estuvieran en el mismo archivo. Claro, si estoy exportando un objeto debo tratarlo como tal.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;basica&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;suma&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;| &lt;a href="https://www.youtube.com/watch?v=0GEUyQXe3NI" rel="noopener noreferrer"&gt;Video-guía&lt;/a&gt; |&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;Con esto, puedo decir que ya estas "listo" para comprender lo que te espera en React.js&lt;/p&gt;

&lt;p&gt;Y lo digo entre comillas porque ya debes tener ciertos conocimientos de desarrollo web, como por ejemplo, como funciona el modelo cliente-servidor, que es ajax, que es backend, que es frontend, que es una api, serverless, JSON, Tokens, etc.&lt;/p&gt;

&lt;p&gt;No es para asustarte, esos conceptos no es que debas dominarlos al 100%, pero que si almenos conozcas la teoría para saber como se comen. &lt;/p&gt;

&lt;p&gt;Por ejemplo, una de las ventajas de React es que podemos hacer potentes aplicaciones y apoyarnos del &lt;strong&gt;serverless&lt;/strong&gt; para no implementar el &lt;strong&gt;backend&lt;/strong&gt; por nosotros mismos. Pero, para probar la app mientras la estamos codeando, podemos utilizar &lt;strong&gt;APIs&lt;/strong&gt; para simular datos reales, para lo mismo, no desarrollar el &lt;strong&gt;backend&lt;/strong&gt; por nosotros mismos.&lt;/p&gt;

&lt;p&gt;Espero que con esto puedas darte una idea de si estas preparado o no para React, la realidad es que Javascript es el pilar de esta librería, sin un buen dominio del lenguaje así como conceptos del desarrollo web, no puedes aspirar a entender React, de nuevo, no es para desalentar, es para que te prepares con este lenguaje antes de entrar al lleno a la librería y después, porque no, algun framework como Vue.js&lt;/p&gt;

&lt;p&gt;Nunca intentes usar librerias o frameworks en especifico si no dominas todavia muy bien el lenguaje, es mejor tener las bases bien cimentadas y el resto sera pan comido.&lt;/p&gt;

&lt;p&gt;Ya para terminar, he tomado como referencia todos los recursos que he dejado adjuntos a través de los puntos (Documentos y Video-Guias)&lt;/p&gt;

&lt;p&gt;También adjunto este curso de Javascript porque es super completo&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=2SetvwBV-SU&amp;amp;list=PLvq-jIkSeTUZ6QgYYO3MwG9EMqC-KoLXA" rel="noopener noreferrer"&gt;Curso Javascript - Jonathan MirCha #jonmircha&lt;/a&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>javascript</category>
      <category>spanish</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
