<?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: Samuel Narciso</title>
    <description>The latest articles on DEV Community by Samuel Narciso (@samuelnarciso28).</description>
    <link>https://dev.to/samuelnarciso28</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%2F424688%2F851f4d4f-069e-4783-8b27-e940b20bb6fd.jpg</url>
      <title>DEV Community: Samuel Narciso</title>
      <link>https://dev.to/samuelnarciso28</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/samuelnarciso28"/>
    <language>en</language>
    <item>
      <title>Aprende a depurar código JavaScript con Chrome DevTools</title>
      <dc:creator>Samuel Narciso</dc:creator>
      <pubDate>Wed, 05 Jan 2022 18:39:34 +0000</pubDate>
      <link>https://dev.to/samuelnarciso28/aprende-a-depurar-codigo-javascript-con-chrome-devtools-1bpa</link>
      <guid>https://dev.to/samuelnarciso28/aprende-a-depurar-codigo-javascript-con-chrome-devtools-1bpa</guid>
      <description>&lt;h3&gt;
  
  
  Introducción 🤓
&lt;/h3&gt;

&lt;p&gt;La depuración de código es una de las partes fundamentales de programar, cuando programo por largas horas dedico más tiempo a corregir errores que escribiendo lineas de código, pero muchas veces la forma en la que ubico los errores es mediante &lt;code&gt;console.log()&lt;/code&gt; , la cual es una herramienta útil, pero no siempre es la más optima o precisa para la tarea de depuración o debugging.&lt;/p&gt;

&lt;p&gt;Todos los exploradores actuales cuentan con una herramienta especializada en la funcion de depuracion y no muchos la usan, sin embargo en este post me propongo explicarte de forma sencilla, clara y mediante un ejemplo como es que la puedes utilizar y sacarle todo el jugo a tan poderosa herramienta.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;En este post estaré utilizando Chrome, sin embargo no dudo que el conocimiento se pueda aplicar a cualquier otro navegador.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Manos a la obra
&lt;/h3&gt;

&lt;p&gt;Comencemos con un programa sencillo, pero si no quieres hacerlo puedes utilizar el &lt;a href="https://googlechrome.github.io/devtools-samples/debug-js/get-started" rel="noopener noreferrer"&gt;ejemplo de google&lt;/a&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!-- Index.html --&amp;gt;&lt;/span&gt;
&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt; &lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;suma&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt; &lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;Depuracion de JavaScript&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;label&amp;gt;&lt;/span&gt; Valor 1:
&lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt; &lt;span class="na"&gt;placeholder=&lt;/span&gt;&lt;span class="s"&gt;"123"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/label&amp;gt;&lt;/span&gt; &lt;span class="nt"&gt;&amp;lt;br&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;label&amp;gt;&lt;/span&gt; Valor 2:
&lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt; &lt;span class="na"&gt;placeholder=&lt;/span&gt;&lt;span class="s"&gt;"789"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/label&amp;gt;&lt;/span&gt; &lt;span class="nt"&gt;&amp;lt;br&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;button&amp;gt;&lt;/span&gt; Sumar valor 1 y valor 2 &lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"app.js"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;

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

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// app.js&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;()&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="nf"&gt;inputsAreEmpty&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;label&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;textContent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Error&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="p"&gt;;&lt;/span&gt;  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="nf"&gt;updateLabel&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;inputsAreEmpty&lt;/span&gt;&lt;span class="p"&gt;()&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="nf"&gt;getNumber1&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;  &lt;span class="dl"&gt;''&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nf"&gt;getNumber2&lt;/span&gt;&lt;span class="p"&gt;()&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="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&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="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&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;updateLabel&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;addend1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;getNumber1&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;addend2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;getNumber2&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;sum&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;addend1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;addend2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nx"&gt;label&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;textContent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;addend1&lt;/span&gt; &lt;span class="o"&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="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;addend2&lt;/span&gt; &lt;span class="o"&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="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;sum&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;getNumber1&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="nx"&gt;inputs&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="nx"&gt;value&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;getNumber2&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="nx"&gt;inputs&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;value&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;inputs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;querySelectorAll&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;input&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;label&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;querySelector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;p&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;button&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;querySelector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;button&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;button&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="s1"&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;onClick&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%2Fuploads%2Farticles%2Fqqgoa7613dd3i0pab8sd.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%2Fqqgoa7613dd3i0pab8sd.png" alt="Figura 1. Página de ejemplo."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Coloca un par de números en cada campo, y presiona el botón de sumar y observa lo que sucede.&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%2F552hmkp8wrbo0ftryjae.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%2F552hmkp8wrbo0ftryjae.png" alt="Figura 2. La suma de los valores debería dar 3."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Claramente tenemos un error ⚠ &lt;br&gt;
Este sencillo ejemplo nos ayudara.&lt;/p&gt;
&lt;h4&gt;
  
  
  Familiarizándonos con el panel de herramientas de desarrollador
&lt;/h4&gt;

&lt;p&gt;El panel de herramientas de desarrollador o también conocido como las DevTools, es quien nos ayudará a la hora de depurar código u otras acciones más que deseemos realizar.&lt;/p&gt;

&lt;p&gt;Para abrir este panel existen distintas formas.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Con el mouse&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Click derecho sobre la página&lt;/li&gt;
&lt;li&gt;Inspect | Inspeccionar&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Con combinacion de teclas&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Mac: &lt;code&gt;Command + Option + I&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Linux | Windows: &lt;code&gt;Control + Shift + I&lt;/code&gt; &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No importa la forma en la que lo abras, abrirá algo similar a 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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fswupyb714bbeb5lp1plw.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%2Fswupyb714bbeb5lp1plw.png" alt="Figura 3. Panel de recursos."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Lo que nos interesa es el apartado superior que dice &lt;code&gt;sources | recursos&lt;/code&gt;, lo presionamos y cambiara el contenido del panel.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Cada panel interno puede modificar su tamaño, inclusive la distribución de los mismos.&lt;/em&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%2Fye4nrz37nv4iekqpwzrl.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%2Fye4nrz37nv4iekqpwzrl.png" alt="Figura 4. Sección de recursos."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Identifiquemos cada panel:&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%2Fcn1rcqmlgjrjb2zb3wgo.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%2Fcn1rcqmlgjrjb2zb3wgo.png" alt="Figura 5. Paneles numerados"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Panel de archivos&lt;/strong&gt; muestra el servidor que corre la página, la carpeta raiz y  los archivos HTML, CSS y JavaScript y otros más incluidos en la Página que estemos viendo.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Panel del editor de código&lt;/strong&gt; después de seleccionar un archivo en el primer panel mostrara el código de este mismo, permitiendo editarlo.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Panel de depuración&lt;/strong&gt; de JS Cuenta con diversas herramientas útiles para la depuración, herramientas tales como, una lista de los Breakpoints, el Call Stack, el Scope de las variables entre otras más.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Panel de consola&lt;/strong&gt; &lt;em&gt;En caso de no ser visible la consola, seleccione cualquier panel anterior y presione la tecla &lt;code&gt;esc&lt;/code&gt;&lt;/em&gt;.  Muestra una consola en la cual podemos utilizar código de JavaScript.&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;
  
  
  Breakpoints
&lt;/h4&gt;

&lt;p&gt;Un breakpoint en pocas palabras es un punto en el que el programa se detendrá, y nos mostrara como se encuentran las variables y más información en ese punto especifico del código.&lt;/p&gt;
&lt;h5&gt;
  
  
  Breakpoints con console.log
&lt;/h5&gt;

&lt;p&gt;Una de las formas más comunes en las que se crean &lt;em&gt;"Breakpoints"&lt;/em&gt; es mediante console.log(), la cual no es malo, pero si es limitado. &lt;/p&gt;

&lt;p&gt;Por ejemplo, si queremos conocer el estado de cada variable en cada momento haríamos 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;//app.js&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;updateLabel&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;addend1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;getNumber1&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;`valor 1: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;addend1&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="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;addend2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;getNumber2&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;`valor 2: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;addend2&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="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;sum&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;addend1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;addend2&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;`Suma: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;sum&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;label&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;textContent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;addend1&lt;/span&gt; &lt;span class="o"&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="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;addend2&lt;/span&gt; &lt;span class="o"&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="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;sum&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;`Texto asignado: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;addend1&lt;/span&gt; &lt;span class="o"&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="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;addend2&lt;/span&gt; &lt;span class="o"&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="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;sum&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;Si corremos el nuevamente la suma y vemos el apartado de consola nos mostrara lo siguiente.&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%2Fm7w8fryc893jv3csi0gy.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%2Fm7w8fryc893jv3csi0gy.png" alt="Figura 6. Depuración mediante console log"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Podemos observar como cada valor son números, pero la suma no es del todo correcta. &lt;/p&gt;

&lt;h5&gt;
  
  
  Breakpoints con debugger
&lt;/h5&gt;

&lt;p&gt;En el código anterior sustituiremos los console.log() por la instrucción &lt;code&gt;debugger;&lt;/code&gt; y regresemos a la pestaña de sources.&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;//app.js&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;updateLabel&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;addend1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;getNumber1&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="k"&gt;debugger&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;addend2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;getNumber2&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="k"&gt;debugger&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;sum&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;addend1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;addend2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nx"&gt;label&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;textContent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;addend1&lt;/span&gt; &lt;span class="o"&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="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;addend2&lt;/span&gt; &lt;span class="o"&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="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;debugger&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;Colocamos valores y presionamos el botón para sumar.&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%2F4wr1daguh3ynjljg7k90.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%2F4wr1daguh3ynjljg7k90.png" alt="Figura 7. Breakpoints con debugger"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Como podemos ver suceden varias cosas curiosas.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;vemos como la página se oscurecé un poco.&lt;/li&gt;
&lt;li&gt;en el panel de editor de código nos marca la linea 19 que dice &lt;code&gt;debugger&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;en el panel de depuración nos despliega la pestaña de scope y a su vez nos muestra el valor de nuestras variables locales y globales.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Sigamos ejecutando y veamos que pasa.&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%2F22uzfhteyehn52cv92ix.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%2F22uzfhteyehn52cv92ix.png" alt="Figura 8. Formas de seguir depurar"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Tenemos dos formas para esto:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;⏩ Hacer un salto hasta el siguiente breakpoint.&lt;/li&gt;
&lt;li&gt;⟳ Ir línea a línea.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;⏩ Demos un par de saltos entre cada breakpoint y veamos que nos muestra.&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%2Fqctav0klc8slc028i55v.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%2Fqctav0klc8slc028i55v.png" alt="Figura 9. Debugger mostrando las variables"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Panel de depuración
&lt;/h4&gt;

&lt;p&gt;Si nos enfocamos el panel de depuración podemos ver el &lt;a href="https://developer.mozilla.org/es/docs/Glossary/Scope" rel="noopener noreferrer"&gt;Scope&lt;/a&gt; con los valores de nuestras variables, tanto locales como globales, también podemos ver el call stack y como esta ordenada cada funció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%2Fuploads%2Farticles%2F1w1kt8hjbbsfpzib216q.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%2F1w1kt8hjbbsfpzib216q.png" alt="Figura 10. Panel de depuración."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Podemos notar como nos muestra cada variable, como lo hacíamos con los &lt;code&gt;console.log()&lt;/code&gt;, sin embargo hay varias ventajas.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;No tuvimos que listar una por una.&lt;/li&gt;
&lt;li&gt;Nos muestra el &lt;a href="https://developer.mozilla.org/es/docs/Glossary/Scope" rel="noopener noreferrer"&gt;Scope&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Podemos inferir el tipo de dato.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Es curioso, ya que el ver las dobles comillas &lt;code&gt;" "&lt;/code&gt; nos debería dar una idea de lo que podría estar fallando.&lt;/p&gt;

&lt;p&gt;Si recordamos los valores dentro de comillas dobles &lt;code&gt;"1"&lt;/code&gt; son tipos &lt;code&gt;String&lt;/code&gt;, mientras que los valores sin comillas dobles &lt;code&gt;1&lt;/code&gt; son &lt;code&gt;number&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Supongamos que no estamos del todo seguros de eso, y queremos seguir investigando&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;¿que más podemos hacer?&lt;/strong&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Watch
&lt;/h4&gt;

&lt;p&gt;La pestaña &lt;strong&gt;watch&lt;/strong&gt; dentro del mismo panel nos puede ayudar a trabajar con las variables.&lt;/p&gt;

&lt;p&gt;Revisemos el tipo de variable utilizando la función &lt;a href="https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Operators/typeof" rel="noopener noreferrer"&gt;typeof&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Dentro de &lt;strong&gt;Watch&lt;/strong&gt; pulsamos el icono &lt;strong&gt;+&lt;/strong&gt; y coloquemos dentro las siguientes instrucciones.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;typeof addend1&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;typeof addend2&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;typeof sum&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%2Ftiyv4g6uwmkmavg392gy.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%2Ftiyv4g6uwmkmavg392gy.png" alt="Figura 11.Tipo de cada variable"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Podemos notar como el tipo de cada una de las variables es un string, indicándonos que la operación que está realizando &lt;a href="https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Operators/Addition" rel="noopener noreferrer"&gt;no es una suma, sino una concatenación&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  Consola
&lt;/h4&gt;

&lt;p&gt;&lt;em&gt;¿Podemos hacer lo mismo de otra forma?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Correcto&lt;/strong&gt;. &lt;br&gt;
Con la consola podemos escribir código y mientras estemos dentro del scope de la función podemos ver sus variables.&lt;/p&gt;

&lt;p&gt;Presiona &lt;code&gt;esc&lt;/code&gt;, y dentro de la consola escribe lo mismo.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;typeof addend1&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;typeof addend2&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;typeof sum&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%2Fjnv3z3zgn0mga72zfeci.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%2Fjnv3z3zgn0mga72zfeci.png" alt="Figura 12. Revisando cada variable"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ahora que ya sabemos que los valores son &lt;code&gt;String&lt;/code&gt; y no &lt;code&gt;number&lt;/code&gt;, podemos deducir que &lt;a href="https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Operators/Addition" rel="noopener noreferrer"&gt;no está sumando, sino que está concatenando&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;
  
  
  Solución
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;¿Que podemos hacer para arreglarlo?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Aplicaremos un &lt;a href="https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Global_Objects/parseInt" rel="noopener noreferrer"&gt;parseo de string a enteros&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Dentro de la consola colocaremos el siguiente código y presionamos &lt;code&gt;enter&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;parseInt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;addend1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nf"&gt;parseInt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;addend2&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%2Fuploads%2Farticles%2Fkizzu821ah2md7cy615t.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%2Fkizzu821ah2md7cy615t.png" alt="Figura 13. Parseo de strings."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Como podemos observar, ahora si muestra el valor esperado, sabiendo esto aplicaremos ese cambio en nuestro código, para que funcione de forma correcta.&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;updateLabel&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;addend1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;getNumber1&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;addend2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;getNumber2&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="c1"&gt;// var sum = addend1 + addend2;&lt;/span&gt;
  &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;sum&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;parseInt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;addend1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nf"&gt;parseInt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;addend2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="nx"&gt;label&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;textContent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;addend1&lt;/span&gt; &lt;span class="o"&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="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;addend2&lt;/span&gt; &lt;span class="o"&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="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;sum&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;Ejecutamos nuevamente nuestro programa y vemos el resultado.&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%2F672us2489i2oe4b2jnst.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%2F672us2489i2oe4b2jnst.png" alt="Figura 14. Operación correcta."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  En resumen ⚡
&lt;/h3&gt;

&lt;p&gt;Chrome y otros navegadores cuentan con herramientas de desarrollador, las cuales nos ayudan a la hora de programar, la pestaña en la que nos enfocamos en esta ocasión fue en la de Sources, la cual nos ayuda a depurar código.&lt;/p&gt;

&lt;p&gt;La depuración de código como vimos se puede realizar de distintas maneras, ya sea mediante console.log () o utilizando la instrucción debugger, aunque mediante console.log es posible, no es la mejor manera de depurar nuestro código, por otro lado, con la instrucción debugger, de la mano con las herramientas de desarrollador esta tarea se vuelve sumamente sencilla.&lt;/p&gt;

&lt;p&gt;No está demás mencionar que aunque las herramientas de depuración de Chrome son sumamente útiles, también debemos tener cierto conocimiento en el lenguaje, para detectar los errores y saber cómo solucionarlos.&lt;/p&gt;

&lt;h3&gt;
  
  
  Referencias 🧐
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://developer.chrome.com/docs/devtools/#javascript" rel="noopener noreferrer"&gt;DevTools javascript&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/es/docs/Glossary/Scope" rel="noopener noreferrer"&gt;Scope&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Operators/typeof" rel="noopener noreferrer"&gt;typeof&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Operators/Addition" rel="noopener noreferrer"&gt;Operador +&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Global_Objects/parseInt" rel="noopener noreferrer"&gt;parseInt&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;



&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;a href="https://twitter.com/SamuelNarciso28" rel="noopener noreferrer"&gt;🐦 Twitter&lt;/a&gt;&lt;/th&gt;
&lt;th&gt;&lt;a href="https://www.samuelnarciso.com/" rel="noopener noreferrer"&gt;🤖 SamuelNarciso.com&lt;/a&gt;&lt;/th&gt;
&lt;th&gt;&lt;a href="https://www.instagram.com/samuel_narciso/" rel="noopener noreferrer"&gt;📸 Instagram&lt;/a&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

</description>
      <category>tools</category>
      <category>javascript</category>
      <category>beginners</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Props de react chidas y bien explicadas.</title>
      <dc:creator>Samuel Narciso</dc:creator>
      <pubDate>Fri, 29 Jan 2021 15:04:34 +0000</pubDate>
      <link>https://dev.to/samuelnarciso28/props-de-react-chidas-y-bien-explicadas-j3k</link>
      <guid>https://dev.to/samuelnarciso28/props-de-react-chidas-y-bien-explicadas-j3k</guid>
      <description>&lt;p&gt;Las propiedades o por la forma mas común &lt;strong&gt;props&lt;/strong&gt; es la manera de enviar datos a los componentes, pasándolos por parámetros.&lt;br&gt;
ejemplo:&lt;br&gt;
Queremos crear un componente que sea una tarjeta de usuario, el cual se llene con datos de cada usuario.&lt;br&gt;
hacemos algo como esto:&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%2Fq7lc82egsgca85q34tz2.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%2Fq7lc82egsgca85q34tz2.png" alt="Tarjeta de usuario"&gt;&lt;/a&gt;&lt;br&gt;
Ahora nuestro componente ocupa los datos [ &lt;em&gt;nombre, sexo, nickname, edad, nacionalidad&lt;/em&gt; ]&lt;/p&gt;

&lt;p&gt;podríamos establecerlos directamente en nuestro texto, pero eso no seria muy dinamico de nuestra parte&lt;/p&gt;

&lt;p&gt;entonces aquí entran las props, que vendrían siendo &lt;strong&gt;parámetros&lt;/strong&gt; con valores dados por el sistema o usuario.&lt;/p&gt;

&lt;h2&gt;
  
  
  como enviamos las propiedades a nuestros componentes?
&lt;/h2&gt;

&lt;p&gt;Para enviar un valor por props los enviamos desde donde estamos llamando al componente, siguiendo la siguiente estructura:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;NombreComponente
  nombre_propiedad =  'valor_de_la_propiedad'  
  .
  .
  .  
/&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;podemos poner cuantas propiedades sean necesarias para nuestro componente.&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%2Ferfnhkv091fwn7jnspah.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%2Ferfnhkv091fwn7jnspah.png" alt="Componente con props"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ya enviamos nuestras propiedades bien dinamicas a nuestro objeto, pero ahora...&lt;/p&gt;

&lt;h2&gt;
  
  
  Como obtenemos las propiedades en nuestro objeto?
&lt;/h2&gt;

&lt;p&gt;Estos llegan a los parámetros de nuestro componente y la forma mas común de  obtenerlos es con un objeto que se llame &lt;strong&gt;props&lt;/strong&gt; y de ahí llamar cada propiedad según la necesitemos.&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%2F0irevmdawu7muee54gvk.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%2F0irevmdawu7muee54gvk.png" alt="Componente recibiendo props"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;(El nombre de las propiedades debe ser el mismo que le colocamos cuando las enviamos)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;(El nombre &lt;strong&gt;props&lt;/strong&gt; es un nombre estándar, pero si podemos colocarle el nombre que nosotros gustemos.)&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%2Fqr59tjho461fbqwalld9.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%2Fqr59tjho461fbqwalld9.png" alt="Componente con props re-bautizadas"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Trucos con las props
&lt;/h2&gt;

&lt;p&gt;Como las estamos pasado por parámetros, podemos utilizar la funcionalidad de &lt;a href="https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Operadores/Destructuring_assignment" rel="noopener noreferrer"&gt;Desestructuracion&lt;/a&gt; y así evitamos la palabra props y colocamos únicamente el nombre del elemento que estamos pasando, haciendo mas entendible nuestro código.&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%2F77rzzi75x3p3h6pxlgag.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%2F77rzzi75x3p3h6pxlgag.png" alt="Componente desestructurado"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;En cualquier caso, si lo desestructuras o no, el resultado siempre seguirá siendo el mismo.&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%2Fm8yt047fxzpwcphj0plj.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%2Fm8yt047fxzpwcphj0plj.PNG" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;(El nombre de las propiedades al ser desestructuradas debe ser el mismo que le colocamos cuando las enviamos)&lt;/em&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>spanish</category>
      <category>beginners</category>
      <category>programming</category>
    </item>
    <item>
      <title>JSX para principiantes</title>
      <dc:creator>Samuel Narciso</dc:creator>
      <pubDate>Sun, 17 Jan 2021 05:09:03 +0000</pubDate>
      <link>https://dev.to/samuelnarciso28/jsx-para-principiantes-59l5</link>
      <guid>https://dev.to/samuelnarciso28/jsx-para-principiantes-59l5</guid>
      <description>&lt;h2&gt;
  
  
  Que no es JSX?
&lt;/h2&gt;

&lt;p&gt;No es un string, ni HTML&lt;/p&gt;

&lt;h2&gt;
  
  
  Que es?
&lt;/h2&gt;

&lt;p&gt;JSX es un &lt;em&gt;pseudolenguaje&lt;/em&gt; que facilita el desarrollo de aplicaciones web por su sintaxis similar a las etiquetas de HTML. Este cuenta con su propia sintaxis, la cuál extiende de Javascript , el cuál se usa en react para describir la interfaz de usuario&lt;/p&gt;

&lt;p&gt;JSX produce &lt;strong&gt;elementos&lt;/strong&gt; o &lt;strong&gt;componentes&lt;/strong&gt; con  los cuales se pretende reutilizarlos a lo largo del sistema.&lt;/p&gt;

&lt;h2&gt;
  
  
  Primeros pasos
&lt;/h2&gt;

&lt;p&gt;Necesitamos tener corriendo react y las importaciones correspondientes &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;JSX toma las mismas etiquetas de HTML para crear los componentes&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Ahora el primer elemento que crearemos con jsx sera:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; &amp;lt;h1&amp;gt; Hola mundo&amp;lt;/h1&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Colocamos nuestra "Etiqueta de jsx" dentro del render, y lo estariamos viendo en nuestra pantalla. En ella solamente se estaria renderizando lo siguiente:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import React from 'react';
import ReactDOM from 'react-dom';

ReactDOM.render( &amp;lt;h1&amp;gt; Hola mundo &amp;lt;/h1&amp;gt; , document.getElementById('root'));
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--71bPkB1I--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/2jhb458rfl9j75ghau64.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--71bPkB1I--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/2jhb458rfl9j75ghau64.png" alt="Hola mundo JSX"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;¿Qué te parece si nuestro JSX lo pasamos a una variable o constante y al render solo le pasamos la referencia de éste y así dejar la instrucción de render un poco mas limpio.?&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import React from 'react';
import ReactDOM from 'react-dom';
const jsx = &amp;lt;h1&amp;gt;Hola mundo desde una constante &amp;lt;/h1&amp;gt;;
ReactDOM.render( jsx, document.getElementById('root'));
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  Que ventajas tenemos con jsx?
&lt;/h3&gt;

&lt;p&gt;JSX nos permite trabajar con javascript dentro de las etiquetas&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Como hacemos eso?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Únicamente colocamos  &lt;strong&gt;{ }&lt;/strong&gt; dentro de la etiqueta, y dentro de ellos ponemos todo el código JavaScript que necesitemos.&lt;br&gt;
&lt;em&gt;Veamos algunos ejemplos:&lt;/em&gt;&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import React from 'react';
import ReactDOM from 'react-dom';

const jsx = &amp;lt;h1&amp;gt; Hola mundo del {new Date().getFullYear()}&amp;lt;/h1&amp;gt;;

ReactDOM.render( jsx, document.getElementById('root'));
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Mostrara algo como: &lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fmmwWqXp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/09hxagtdxmqqo1zlwpbq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fmmwWqXp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/09hxagtdxmqqo1zlwpbq.png" alt="JSX desde variable e inyectando js"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let nombre = 'Samuel';
const jsx = &amp;lt;h1&amp;gt; Hola {nombre}&amp;lt;/h1&amp;gt;;

ReactDOM.render( jsx, document.getElementById('root'));
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--gj7fZO8F--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/puunhgpctps8jb4u3ond.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--gj7fZO8F--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/puunhgpctps8jb4u3ond.png" alt="Inyectando variables a JSX"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const usuario = {
nombre: 'Samuel',
nickName: 'Samus',
edad: 20  };

const jsx = &amp;lt;h1&amp;gt; Hola {usuario.nombre}, tienes {usuario.edad} años y tu Nickname es {usuario.nickName} &amp;lt;/h1&amp;gt;;

ReactDOM.render(jsx, document.getElementById('root'));
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6gFpSOV2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/qzw1n9svvngjejurxwsk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6gFpSOV2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/qzw1n9svvngjejurxwsk.png" alt="JSX con valores de un objeto"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Con jsx podemos juntar la sencillez de html con el poder de Javascript, pero...&lt;br&gt;
&lt;strong&gt;que pasa si quieres poner mas de una etiqueta?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Sigamos con el ejemplo anterior, supongamos que quiero el saludo en un h1 y los demas datos en un parrafo, podriamos pensar que haciendolo de las siguientes maneras seria correcto:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const jsx = &amp;lt;h1&amp;gt; Hola {usuario.nombre}, &amp;lt;/h1&amp;gt; &amp;lt;p&amp;gt; tienes {usuario.edad} años y tu Nickname es {usuario.nickName} &amp;lt;/p&amp;gt; ;

ReactDOM.render(jsx, document.getElementById('root'));
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Si lo intentamos ejecutar mostrara algo parecido a esto:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--23t-HYom--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/4ue6wnjofo3y6dnmuuw9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--23t-HYom--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/4ue6wnjofo3y6dnmuuw9.png" alt="Error con JSX"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;(Si es que estas trabajando con vsCode)&lt;/em&gt; , el mismo vscode te puede mencionar un error como el siguiente, el cual comenta es por que JSX debe tener un elemento primario, y ahi contamos con 2 elementos.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--diRTfd20--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/i60dtuvz7z6t1hk8gahi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--diRTfd20--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/i60dtuvz7z6t1hk8gahi.png" alt="VSCODE error en JSX"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Por ende puedes pensar en crear varios elementos primarios y luego renderizarlos. vamos a intentarlo.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const jsx = &amp;lt;h1&amp;gt; Hola {usuario.nombre}, &amp;lt;/h1&amp;gt; ;
const jsx2 = &amp;lt;p&amp;gt; tienes {usuario.edad} años y tu Nickname es {usuario.nickName} &amp;lt;/p&amp;gt;;

ReactDOM.render(jsx,jsx2, document.getElementById('root'));
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;De esta manera ya no nos marca un error por tener 2 elementos juntos, debido a que estan separados, pero si recargamos nuestra pagina nos muestra otro error&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--l-y5ISvh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/rf1oldah7xy5sx3mc90w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--l-y5ISvh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/rf1oldah7xy5sx3mc90w.png" alt="Error, al renderizar varios componentes"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Entonces, como podemos poner varias etiquetas a la vez?&lt;/strong&gt;&lt;br&gt;
Para realizarlo debemos ponerlas dentro de un contenedor&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const jsx = (
&amp;lt;div&amp;gt;
&amp;lt;h1&amp;gt; Hola {usuario.nombre}, &amp;lt;/h1&amp;gt;
&amp;lt;p&amp;gt; tienes {usuario.edad} años y tu Nickname es {usuario.nickName} &amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;   );

ReactDOM.render(jsx, document.getElementById('root'));
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Ahora si, estamos cumpliendo con la regla de tener un elemento primario en JSX (siendo este nuestro contenedor div) y cumplimos con la regla de mandar solo un elemento jsx a renderizar.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--vn7bHfa6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/d6fw02f9m9eb9pwarmv6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vn7bHfa6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/d6fw02f9m9eb9pwarmv6.png" alt="componentes dentro de un contenedor"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Nota&lt;/em&gt;: Puede ser cualquier tipo de contenedor, no necesariamente un div. Por ejemplo: div, footer, main, header, section, article, &lt;em&gt;(... y todos los contenedores que se te ocurran )&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Veamos la estructura que nos genero en nuestro html&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Q6ugT1Zg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/54p25vi7sqvp55b2yrpm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Q6ugT1Zg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/54p25vi7sqvp55b2yrpm.png" alt="JSX Estructura html"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Vemos como efectivamente, dentro del contenedor root ( el cual es referenciado dentro de la instruccion de render) estamos poniendo un div, un h1 y p.&lt;/p&gt;

&lt;p&gt;pero que pasa si no queremos ese segundo div?&lt;/p&gt;

&lt;p&gt;Utilizaremos &lt;strong&gt;los fragments&lt;/strong&gt;, los cuales nos permiten agregar etiquetas sin agregar nodos extras al DOM,&lt;/p&gt;

&lt;p&gt;y como los usamos?&lt;/p&gt;

&lt;p&gt;Existen dos maneras:&lt;/p&gt;

&lt;h3&gt;
  
  
  Forma 1 explicita
&lt;/h3&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const jsx = (
&amp;lt;React.Fragment&amp;gt;

&amp;lt;h1&amp;gt; Hola {usuario.nombre}, &amp;lt;/h1&amp;gt;  
&amp;lt;p&amp;gt; tienes {usuario.edad} años y tu Nickname es {usuario.nickName} &amp;lt;/p&amp;gt;

&amp;lt;/React.Fragment&amp;gt;);

ReactDOM.render(jsx, document.getElementById('root'));
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Podemos notar como en lugar del contenedor padre &lt;strong&gt;div&lt;/strong&gt; usamos &lt;strong&gt;React.Fragment&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Forma 2 Implicita
&lt;/h3&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const jsx = (
&amp;lt;&amp;gt;

&amp;lt;h1&amp;gt; Hola {usuario.nombre}, &amp;lt;/h1&amp;gt;
&amp;lt;p&amp;gt; tienes {usuario.edad} años y tu Nickname es {usuario.nickName} &amp;lt;/p&amp;gt;

&amp;lt;/&amp;gt;   );

ReactDOM.render(jsx, document.getElementById('root'));
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Podemos notar como en lugar del contenedor padre &lt;strong&gt;div&lt;/strong&gt; o &lt;strong&gt;React.Fragment&lt;/strong&gt; Las etiquetas &amp;lt;&amp;gt; y &amp;lt;/&amp;gt; estan vacias.&lt;/p&gt;

&lt;p&gt;En ambos casos cuando inspeccionemos nuestra pagina, veremos lo siguiente:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--HYvHZg3J--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/57p1puh3l9cr4xx1p1zl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--HYvHZg3J--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/57p1puh3l9cr4xx1p1zl.png" alt="Fragments JSX"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Notamos como ahora en este caso las etiquetas h1 y p estan directamente en el contenedor root, y no dentro de un contenedor extra, como si era el caso anterior.&lt;/p&gt;

&lt;h3&gt;
  
  
  Atributos en las etiquetas de JSX
&lt;/h3&gt;

&lt;p&gt;Recuerda que estas &lt;strong&gt;no son HTML&lt;/strong&gt;, sino JSX, por ende algunos atributos cambiaron, son pocos los atributos que cambiaron, el principal motivo es que ya existen en js como palabras reservadas.&lt;/p&gt;

&lt;p&gt;Aqui te menciono los mas destacados o mas comunes:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;JSX&lt;/th&gt;
&lt;th&gt;HTML&lt;/th&gt;
&lt;th&gt;Descripcion&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;ClassName&lt;/td&gt;
&lt;td&gt;class&lt;/td&gt;
&lt;td&gt;Define las clases que tendrá un elemento.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;htmlFor&lt;/td&gt;
&lt;td&gt;For&lt;/td&gt;
&lt;td&gt;Se aplica en etiquetas label, comúnmente usados en formularios&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;style={ }&lt;/td&gt;
&lt;td&gt;style=""&lt;/td&gt;
&lt;td&gt;Se usa para definir estilos en las mismas lineas de html, &lt;em&gt;forma poco usada&lt;/em&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

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