<?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: Rodrigo Grau</title>
    <description>The latest articles on DEV Community by Rodrigo Grau (@rogab0t).</description>
    <link>https://dev.to/rogab0t</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%2F1139129%2Fb45e83be-8145-4a1d-b72c-63f78ead1eae.jpeg</url>
      <title>DEV Community: Rodrigo Grau</title>
      <link>https://dev.to/rogab0t</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rogab0t"/>
    <language>en</language>
    <item>
      <title>REACT CONTEXT</title>
      <dc:creator>Rodrigo Grau</dc:creator>
      <pubDate>Tue, 15 Aug 2023 01:12:51 +0000</pubDate>
      <link>https://dev.to/rogab0t/react-context-2p0l</link>
      <guid>https://dev.to/rogab0t/react-context-2p0l</guid>
      <description>&lt;ul&gt;
&lt;li&gt;[REACT CONTEXT:]&lt;/li&gt;
&lt;li&gt;[¿CUÁNDO USAR CONTEXT?]&lt;/li&gt;
&lt;li&gt;[¿CUÁNDO NO USAR CONTEXT?]&lt;/li&gt;
&lt;li&gt;[¿CÓMO USAR CONTEXT?]
# REACT CONTEXT:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Context es una API de React que permite comunicar información entre los componentes sin recorrer cada nivel del árbol de nuestros componentes.&lt;/p&gt;

&lt;h2&gt;
  
  
  DATA FLOW:
&lt;/h2&gt;

&lt;p&gt;React está diseñado para que la información fluya en una sola dirección, desde los componentes superiores hacia abajo. Al seguir ésta regla, el flujo de información es explícito y más fácil de comprender.&lt;/p&gt;

&lt;h2&gt;
  
  
  PROP DRILLING:
&lt;/h2&gt;

&lt;p&gt;Aunque React está diseñado para enviar información desde los componentes superiores hacia abajo, ***********&lt;strong&gt;&lt;em&gt;existen escenarios&lt;/em&gt;&lt;/strong&gt;*********** para los cuales esto puede ser problemático. “***&lt;strong&gt;&lt;em&gt;Prop drilling&lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;&lt;em&gt;” es el problema por el que los componentes reciben *&lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;props&lt;/strong&gt;**** con el único propósito de servir como media para que ésta información llegue a los componentes hijos o más abajo en la jerarquía.&lt;/p&gt;

&lt;p&gt;El problema de *&lt;strong&gt;&lt;em&gt;prop drilling&lt;/em&gt;&lt;/strong&gt;* no está directamente relacionado con Context, ya que ***************************************&lt;strong&gt;&lt;em&gt;no todos los problemas&lt;/em&gt;&lt;/strong&gt;*************************************** de prop drilling deben ser resueltos con Context.&lt;/p&gt;

&lt;h1&gt;
  
  
  ¿CUÁNDO USAR CONTEXT?
&lt;/h1&gt;

&lt;p&gt;Context es un &lt;strong&gt;manejador de estado(los valores que tiene ciertos elementos en un momento dado)&lt;/strong&gt; por lo que su uso debe asociarse con almacenar la información que debe ser compartida por muchos componentes, introducir prop drilling o algún otro problema.&lt;/p&gt;

&lt;p&gt;Algunos ejemplos son:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Autenticación de usuario.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Theming.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Manejo de distintos idiomas.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Preferencias de moneda, zonas horarias…&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Si estás trabajando con información que afecta a distintos componentes, usar Context puede ayudar a compartir la información entre los componentes y que todos reciban la actualización correspondiente.&lt;/p&gt;

&lt;p&gt;También se puede usar en secciones del árbol:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Un formulario para el que los controles deben compartir información.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Un componente separado en distintos pasos para mostrar.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Una aplicación puede tener y generalmente requiere más de un solo contexto.&lt;/p&gt;

&lt;h1&gt;
  
  
  ¿CUÁNDO NO USAR CONTEXT?
&lt;/h1&gt;

&lt;p&gt;El uso de Context tienen algunos detalles, los cuales son:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Complejidad&lt;/strong&gt;: Se cambia de un modelo donde la información fluye explícitamente a un modelo donde no es explícito dicho flujo de la información.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Acoplamiento&lt;/strong&gt;: Introduce dependencia entre los componentes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Con Context la información ya no fluye en una sola vía, sino que puede ir en ambos sentidos, haciendo más complejo el código y su interpretación o entendimiento.&lt;/p&gt;

&lt;p&gt;Si un elemento/componente está usando Context, no puede ser reciclado/reutilizado en partes del árbol que no tengan contexto, lo cual significa que los componentes operen en donde el contexto que necesitan esté disponible, produciendo dependencia y acoplamiento.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;En muchos casos ***********************&lt;strong&gt;&lt;em&gt;prop drilling&lt;/em&gt;&lt;/strong&gt;*********************** puede ser mejor que usar ***********&lt;strong&gt;&lt;em&gt;Context&lt;/em&gt;&lt;/strong&gt;***********.&lt;/li&gt;
&lt;li&gt;En otros casos es mejor usar composición.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  ¿CÓMO USAR CONTEXT?
&lt;/h1&gt;

&lt;h3&gt;
  
  
  Para implementarlo:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Se debe importar la función “***********************&lt;strong&gt;&lt;em&gt;createContext&lt;/em&gt;&lt;/strong&gt;***********************” desde la librería de React.&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;createContext&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="s2"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Se importa la función ****"****createContext****"****desde la librería de ""react, para crear un contexto dentro de un componente de React y comunicar información entre los componentes sin recorrer cada nivel del árbol de nuestros componentes&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Se declara una constante nombrada arbitrariamente especificando a qué contexto se hace referencia, a la cual se le asigna como valor, ejecutar la función importada “&lt;strong&gt;createContext()&lt;/strong&gt;”.&lt;/p&gt;

&lt;p&gt;Ésta se puede exportar para poder ser utilizada en un componente externo.&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="k"&gt;export&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;ThemeContext&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;createContext&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Se exporta, la declaración de constante con valor asignado de, ejecutar la función para crear un contexto dentro de un componente de React&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Para utilizarlo:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;El resultado de llamar a ejecutar “&lt;strong&gt;createContext()&lt;/strong&gt;” es un objeto que incluye la propiedad *************&lt;strong&gt;&lt;em&gt;Provider&lt;/em&gt;&lt;/strong&gt;************* que se debe de incluir en el árbol/JSX para indicar que todos los elementos que están dentro de dicho “*************&lt;strong&gt;&lt;em&gt;Provider&lt;/em&gt;&lt;/strong&gt;*************” pueden acceder a los valores almacenados en el contexto.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Se declara como una &lt;strong&gt;etiqueta HTML/componente React&lt;/strong&gt;, mediante el nombre declarado de la constante para el contexto, y acceder a su propiedad “*************&lt;strong&gt;&lt;em&gt;Provider&lt;/em&gt;&lt;/strong&gt;*************”.&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight jsx"&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;useState&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;createContext&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="s2"&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;//Se importan, la función hook "useState" para agregar estado a componentes funcionales, y la función "createContext" para crear un contexto que puede ser compartido entre componentes.&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;ColorPicker&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./ColorPicker&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//Se importa el componente "ColorPicker", desde, su ruta.&lt;/span&gt;

&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;ThemeContext&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;createContext&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Se exporta la declaración de constante con valor asignado de, ejecutar la función para crear un contexto compartido entre componentes, será utilizado para compartir y acceder al valor del color en diferentes componentes.&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&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="c1"&gt;//Se exporta como valor por defecto, la declaración de función que será un componente, será la raíz de la aplicación, la cual ejecuta el siguiente bloque.&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;color&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setColor&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;aquamarine&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de variable la cual será un estado del componente, en la cual se utiliza la sintaxis de destructuración de arreglos, siendo el primer valor, el valor actual del estado el cual empieza siendo el valor por defecto enviado a "useState", y como segundo valor la función que actualizará el estado, dicha constante tiene valor asignado de, llamar a ejecutar la función importada para el estado del componente, la cual recibe como argumento para el valor por defecto del componente, el valor en cadena de texto de un color.&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="c1"&gt;//Se retorna una estructura de JSX, el cual será el componente a ser renderizado, siendo colocado entre paréntesis.&lt;/span&gt;
        &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;ThemeContext&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Provider&lt;/span&gt;&lt;span class="err"&gt;**&lt;/span&gt; &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;color&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setColor&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="err"&gt;**&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;** //Se coloca como etiqueta HTML/componente, el contexto declarado, accediendo a su propiedad "Provider", para indicar que todos los elementos pueden acceder a los valores almacenados en el contexto, y recibiendo la prop "value" para ser el valor del contexto con valor asignado de, dentro de llaves por ser código de JS, mediante la sintaxis de destructuración de arreglos, como primer valor, el valor actual del estado "color", y como segundo valor, la función de actualización para el valor de dicho estado, para que los componentes descendientes accedan y actualicen el valor del color.
            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;backgroundColor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;color&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta contenedora de bloque, la cual posee la propiedad de "estilo", con valor asignado dentro de llaves por ser código de JS, de un objeto que contendrá las propiedades CSS, la cual es, la propiedad de color de fondo, con valor, del valor actual del estado "color".
                &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;Hello&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; //Etiqueta de título principal, contiene texto a ser mostrado.
                &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;Lorem ipsum dolor sit amet consectetur elit :3&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; //Etiqueta de párrafo, contiene texto a ser mostrado.
                &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;ColorPicker&lt;/span&gt; &lt;span class="na"&gt;setColor&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;setColor&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;/&amp;gt;&lt;/span&gt; //Se ejecuta como etiqueta HTML/componente hijo, el componente "ColorPicker" impotado, el cual posee la propiedad "setColor" nombrada arbitrariamente para saber su función, con valor asignado dentro de llaves por ser código de JS, de la función de actualización del valor actual del estado "color", para así actualizar el valor de color del elemento "&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;" que posee la propiedad de color de fondo con valor del valor actual del estado "color".
            &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&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;ThemeContext&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Provider&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;**
    );
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Se define un valor para el contexto, mediante colocar la propiedad “*************&lt;strong&gt;&lt;em&gt;value={[,]}&lt;/em&gt;&lt;/strong&gt;**********&lt;em&gt;**” en “&lt;/em&gt;&lt;em&gt;&lt;/em&gt;&lt;em&gt;”, siendo mediante la sintaxis de destructuración de arreglos “&lt;/em&gt;&lt;strong&gt;&lt;em&gt;[]&lt;/em&gt;&lt;/strong&gt;*”, el valor actual del estado correspondiente, y la función de actualización de dicho estado.&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight jsx"&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;useState&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;createContext&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="s2"&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;//Se importan, la función hook "useState" para agregar estado a componentes funcionales, y la función "createContext" para crear un contexto que puede ser compartido entre componentes.&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;ColorPicker&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./ColorPicker&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//Se importa el componente "ColorPicker", desde, su ruta.&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;ThemeContext&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;createContext&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;//Se exporta la declaración de constante con valor asignado de, ejecutar la función para crear un contexto compartido entre componentes, será utilizado para compartir y acceder al valor del color en diferentes componentes.&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&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="c1"&gt;//Se exporta como valor por defecto, la declaración de función que será un componente, será la raíz de la aplicación, la cual ejecuta el siguiente bloque.&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;color&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setColor&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="nx"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;aquamarine&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de variable la cual será un estado del componente, en la cual se utiliza la sintaxis de destructuración de arreglos, siendo el primer valor, el valor actual del estado el cual empieza siendo el valor por defecto enviado a "useState", y como segundo valor la función que actualizará el estado, dicha constante tiene valor asignado de, llamar a ejecutar la función importada para el estado del componente, la cual recibe como argumento para el valor por defecto del componente, el valor en cadena de texto de un color.&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="c1"&gt;//Se retorna una estructura de JSX, el cual será el componente a ser renderizado, siendo colocado entre paréntesis.&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;ThemeContext&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Provider&lt;/span&gt; &lt;span class="err"&gt;**&lt;/span&gt;&lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;color&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setColor&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="err"&gt;**&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Se coloca como etiqueta HTML/componente, el contexto declarado, accediendo a su propiedad "Provider", para indicar que todos los elementos pueden acceder a los valores almacenados en el contexto, y recibiendo la prop "value" para ser el valor del contexto con valor asignado de, dentro de llaves por ser código de JS, mediante la sintaxis de destructuración de arreglos, como primer valor, el valor actual del estado "color", y como segundo valor, la función de actualización para el valor de dicho estado, para que los componentes descendientes accedan y actualicen el valor del color.
            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;backgroundColor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;color&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta contenedora de bloque, la cual posee la propiedad de "estilo", con valor asignado dentro de llaves por ser código de JS, de un objeto que contendrá las propiedades CSS, la cual es, la propiedad de color de fondo, con valor, del valor actual del estado "color".
                &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;Hello&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; //Etiqueta de título principal, contiene texto a ser mostrado.
                &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;Lorem ipsum dolor sit amet consectetur elit :3&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; //Etiqueta de párrafo, contiene texto a ser mostrado.
                &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;ColorPicker&lt;/span&gt; &lt;span class="na"&gt;setColor&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;setColor&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;/&amp;gt;&lt;/span&gt; //Se ejecuta como etiqueta HTML/componente hijo, el componente "ColorPicker" impotado, el cual posee la propiedad "setColor" nombrada arbitrariamente para saber su función, con valor asignado dentro de llaves por ser código de JS, de la función de actualización del valor actual del estado "color", para así actualizar el valor de color del elemento "&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;" que posee la propiedad de color de fondo con valor del valor actual del estado "color".
            &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&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;ThemeContext&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Provider&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    );
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Para utilizar el valor del contexto en algún componente externo:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Se debe importar la función hook “&lt;strong&gt;useContext&lt;/strong&gt;” desde la librería de React.&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useContext&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="s2"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Se importa la función hook "useContext" desde,la librería de "react", para acceder al contexto compartido.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Se debe importar el “&lt;strong&gt;createContext()&lt;/strong&gt;” declarado en el componente principal, el cual es el contexto necesario para el componente externo.&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;ThemeContext&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="s2"&gt;./App&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Se importa el contexto declarado en el componente principal, para poder utilizar los valores de dicho contexto.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Dentro del componente a utiliza el valor del contexto, se ejecuta el hook “&lt;strong&gt;useContext()&lt;/strong&gt;” el cual recibe como argumento, el contexto importado desde el componente principal del cual se requiere obtener su información.&lt;/p&gt;

&lt;p&gt;Siendo que “&lt;strong&gt;useContext()&lt;/strong&gt;” revisará si en la jerarquía hacía arriba encuentra en algún punto el  “&lt;strong&gt;Provider&lt;/strong&gt;” para éste contexto, y de esta manera saber que si puede leer ésta información.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Para ello:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Se declara una variable con la sintaxis de destructuración de arreglos, para &lt;strong&gt;poder utilizar&lt;/strong&gt; el valor actual del estado correspondiente, y la función de actualización de dicho estado.&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="o"&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;color&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setColor&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;useContext&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ThemeContext&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de variable con valor asignado de, mediante la sintaxis de destructuración de arreglos para acceder a los valores declarados en el contexto, los cuales son el valor actual del estado "color" y su función de actualización, con valor asignado de, ejecutar el hook para acceder al contexto compartido, el cual recibe como argumento, el contexto importado.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;Lo que retorna el hook “&lt;strong&gt;useContext()&lt;/strong&gt;” es aquello que se haya asignado en la propiedad “&lt;strong&gt;value={}&lt;/strong&gt;” del componente “&lt;strong&gt;&lt;/strong&gt;”, siendo el valor mas actualizado de dicho contexto.&lt;/p&gt;

&lt;p&gt;Cuando se ejecuta la función de actualización del estado que se obtuvo mediante la destructuración, es que se actualiza el estado de dicha función de actualización, lo que a su vez actualiza el contexto correspondiente.&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useContext&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="s2"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Se importa la función hook "useContext" desde,la librería de "react", para acceder al contexto compartido.&lt;/span&gt;
&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;ThemeContext&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="s2"&gt;./App&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Se importa el contexto declarado en el componente principal, desde, su ruta, para poder utilizar los valores de dicho contexto.&lt;/span&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="s2"&gt;prop-types&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//Se importa el módulo "PropTypes" para validar las propiedades, desde, la librería "prop-types".&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;ColorPicker&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;//Se exporta como valor por defecto, la declaración de fución que será un componente para controlar un color de fondo de un componente, la cual ejecuta el siguiente bloque.&lt;/span&gt;
    &lt;span class="o"&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;color&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setColor&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;useContext&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ThemeContext&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de variable con valor asignado de, mediante la sintaxis de destructuración de arreglos para acceder a los valores declarados en el contexto, los cuales son el valor actual del estado "color" y su función de actualización, con valor asignado de, ejecutar el hook para acceder al contexto compartido, el cual recibe como argumento, el contexto importado.&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="c1"&gt;//Se retorna una estructura de JSX, el cual será el componente a ser renderizado, siendo colocado entre paréntesis.&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta contenedora de bloque.
            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;input&lt;/span&gt;  &lt;span class="c1"&gt;//Etiqueta de control/ingreso de datos, la cual posee la s siguientes propiedades.&lt;/span&gt;
                &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"color"&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad de tipo, con valor para ser un selector de color.&lt;/span&gt;
                &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;color&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad de valor, con valor asignado dentro de llaves por se código de JS, de el valor actual del estado "color".&lt;/span&gt;
                &lt;span class="na"&gt;onChange&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&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="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;setColor&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="nx"&gt;target&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="si"&gt;}&lt;/span&gt;&lt;span class="err"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad manejadora del evento de cambio en éste input, con valor asignado dentro de llaves por ser código de JS, de una función de flecha callback, la cual recibe como argumento el evento ejecutado, y ejecutando, la función de actualización del estado "color", la cual recibe como argumento, del evento ejecutado, acceder al elemento que lo ejecutó, y acceder a su valor, para que así cada vez que cambie el valor de éste contról ese sea el nuevo valor actual del estado "color".&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;div&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="nx"&gt;ColorPicker&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="c1"&gt;//De dicha función componente, se accede a su propiedad estática "propTypes" que es un objeto para especificar los tipos de datos esperados de las propiedades(****props****) de un componente y asegurarse de que sean utilizadas correctamente, el cual es obtenido de la librería "prop-types", y se reasigna su valor.&lt;/span&gt;
    &lt;span class="na"&gt;setColor&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="c1"&gt;//Se establece que, la propiedad "name" debe, desde la librería "PropTypes", ser una función&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>react</category>
      <category>frontend</category>
      <category>webdev</category>
      <category>javascript</category>
    </item>
    <item>
      <title>FORMULARIOS EN REACT</title>
      <dc:creator>Rodrigo Grau</dc:creator>
      <pubDate>Tue, 15 Aug 2023 01:11:45 +0000</pubDate>
      <link>https://dev.to/rogab0t/formularios-en-react-74h</link>
      <guid>https://dev.to/rogab0t/formularios-en-react-74h</guid>
      <description>&lt;ul&gt;
&lt;li&gt;[FORMIK:]&lt;/li&gt;
&lt;li&gt;[FORMA BÁSICA DE USO:]&lt;/li&gt;
&lt;li&gt;[FORMA DINÁMICA DE USO:]&lt;/li&gt;
&lt;li&gt;[CÓDIGO REFACTORIZADO:]&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  FORMIK:
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Librería open-source de componentes de React para construir formularios.&lt;/li&gt;
&lt;li&gt;Ayuda a:

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Obtener los valores de entrada y de salida de los estados en un formulario.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Validaciones y mensajes de error.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Manejar envío de formularios.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Implementación:
&lt;/h2&gt;

&lt;p&gt;Para instalar Formik, asegúrate de tener Node.js y npm (Node Package Manager) instalados en tu computadora. Luego, puedes seguir estos pasos para instalar Formik:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Abre una terminal o línea de comandos en tu sistema operativo.&lt;/li&gt;
&lt;li&gt;Navega al directorio de tu proyecto o crea uno nuevo donde quieras usar Formik.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Ejecuta el siguiente comando para instalar Formik a través de npm:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;**npm install formik --save**
&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;Este comando instalará Formik y lo añadirá como una dependencia en tu archivo &lt;strong&gt;package.json&lt;/strong&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Después de la instalación, podrás utilizar Formik en tu proyecto importándolo en tus archivos JavaScript o TypeScript:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Formik&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Form&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Field&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;ErrorMessage&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;useFormik&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;formik&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Se importan todo lo neceario para usar "Formik**"**, desde la librería "**formik**"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ol&gt;

&lt;h1&gt;
  
  
  FORMA BÁSICA DE USO:
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;A una constante declarada arbitrariamente se le asigna el hook personalizado *******************&lt;strong&gt;&lt;em&gt;useFormik({}).&lt;/em&gt;&lt;/strong&gt;*******************&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Dicho hook recibe como argumento un objeto con las siguientes propiedades:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;initialValues&lt;/strong&gt;: Son los valores iniciales, las cuales son colocadas dentro de un objeto, siendo todos los valores iniciales que se tendrán en el formulario. Se deben de definir todos los campos del formulario.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;onSubmit&lt;/strong&gt;: Función que maneja el evento de entrega de la información del formulario, la cual mediante una función flecha callback o la referencia a una función creada para maneja el evento, va a recibir todos los valores de cada uno de los inputs que se puedan obtener, mediante recibir como argumento un objeto "values" que contiene los valores actuales de todos los campos del formulario, y como segundo argumento el objeto “&lt;strong&gt;formikBag&lt;/strong&gt;” del cual se pueden acceder a varias utilidades como métodos mediante la sintaxis de destructuración “*&lt;strong&gt;&lt;em&gt;{ }&lt;/em&gt;&lt;/strong&gt;&lt;em&gt;”, o usar “&lt;/em&gt;&lt;em&gt;formikBag&lt;/em&gt;&lt;em&gt;” y acceder utilizando “&lt;/em&gt;&lt;em&gt;formikBag.nameMetod&lt;/em&gt;*”.
&lt;/li&gt;
&lt;/ul&gt;

&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;formik&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;useFormik&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de constante que será el controlador del formulario, siendo una instancia de "Formik" que almacena el estado y las funciones relacionadas con el formulario con valor asignado de, la función hoot "useFormik", que configura varias opciones importantes mediante un obejto que recibe como argumento y que posee las siguientes propiedades&lt;/span&gt;
    &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="na"&gt;initialValues&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad del objeto, la cual será los valores iniciales de los inputs/controles del fomulario, con valor de un objeto con las siguientes propiedades&lt;/span&gt;
        &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="na"&gt;email&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="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad del objeto, que será el valor inicial para el control de "email", con valor asignado de, una cadena vacía &lt;/span&gt;
        &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="na"&gt;password&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="c1"&gt;//Propiedad del objeto, que será el valor inicial para el control de "password", con valor asignado de, una cadena vacía &lt;/span&gt;
    &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;onSubmit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;values&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="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad del objeto, que será una función que se ejecutará cuando el formulario sea enviado, con valor asignado de, una función de flecha callback, la cual recibe como argumento un objeto "values" que contiene los valores actuales de todos los campos del formulario.&lt;/span&gt;
&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;});&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;Lo que retorna la constante &lt;strong&gt;formik&lt;/strong&gt;, mediante el uso del hook &lt;strong&gt;useFormik({})&lt;/strong&gt;, es un obejto que posee distintos atributos y método necesarios para los formularios.&lt;/p&gt;


&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;Una vez creada dicha constante con los datos configurados, mediante un formulario declarado con las etiquetas HTML:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;En la etiqueta &lt;strong&gt;&lt;/strong&gt;, en su propiedad *******************&lt;strong&gt;&lt;em&gt;onSubmit={}&lt;/em&gt;&lt;/strong&gt;****************&lt;strong&gt;&lt;em&gt;, se le asigna *&lt;/em&gt;&lt;/strong&gt;*****&lt;strong&gt;&lt;em&gt;formik.handleSubmit&lt;/em&gt;&lt;/strong&gt;******&lt;em&gt;**, haciendo que se llame a ejecutar el valor de la propiedad “&lt;/em&gt;&lt;em&gt;onSubmit&lt;/em&gt;&lt;em&gt;” de la constante “&lt;/em&gt;&lt;em&gt;formik&lt;/em&gt;&lt;em&gt;” la cual es una función para manejar dicho evento, para así pasarle los valores del formulario a la función flecha o la función creada para maneja el evento de dicha propiedad “&lt;/em&gt;******************&lt;strong&gt;&lt;em&gt;onSubmit={}&lt;/em&gt;&lt;/strong&gt;*******************”.&lt;/p&gt;

&lt;p&gt;Siendo que “&lt;strong&gt;handleSubmit&lt;/strong&gt;” es un método interno proporcionado por Formik que se ejecutará cuando se envíe el formulario y manejará los datos del formulario en ese momento.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;En cada uno de los &lt;strong&gt;inputs o elementos del formulario&lt;/strong&gt;, en su propiedad “*****&lt;strong&gt;&lt;em&gt;name&lt;/em&gt;&lt;/strong&gt;**&lt;em&gt;**” se le debe de asignar como valor el mismo valor asignado dentro de la propiedad “&lt;/em&gt;&lt;em&gt;initialValues&lt;/em&gt;*” correspondiente a su elemento del formulario, para que así se enlacen sus valores.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;En la propiedad “*******&lt;strong&gt;&lt;em&gt;value&lt;/em&gt;&lt;/strong&gt;****&lt;em&gt;**”, dentro de llaves por ser código de JS, desde la constante “&lt;/em&gt;&lt;em&gt;formik&lt;/em&gt;&lt;em&gt;”, se accede a sus valores “&lt;/em&gt;&lt;em&gt;values&lt;/em&gt;*” que son los valores iniciales, y se accede al valor correspondiente para el input o elemento&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;En su propiedad *******************&lt;strong&gt;&lt;em&gt;onChange={},&lt;/em&gt;&lt;/strong&gt;******************* desde la constante “&lt;strong&gt;formik&lt;/strong&gt;”, se ejecuta la función &lt;strong&gt;handleChange&lt;/strong&gt; la cual es una función interna de React que maneja el cambio de valor en el campo de entrada y actualiza el estado del componente.&lt;/p&gt;

&lt;p&gt;Formik utiliza esta función(&lt;strong&gt;handleChange&lt;/strong&gt;) interna de React para escuchar los cambios de los campos del formulario y actualizar automáticamente los valores en su estado interno.&lt;br&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="o"&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="na"&gt;onSubmit&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;formik&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;handleSubmit&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;** //Etiquta de formulario, la cual posee la propiedad manejadora de ventos del evento de "entregar/enviar" los datos del formulario, con valor asignado de, dentro de llaves por ser código de JS, desde la instancia de Formik "formik", ejecutar su función manejadora de dicho evento la cual hace refencia a la propiedad "onSubmit" de dicha instancia "formik"
    **&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;input&lt;/span&gt;&lt;span class="err"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Etiqueta de ingreso de datos, la cual posee los siguientes atriutos y propiedades&lt;/span&gt;
        &lt;span class="err"&gt;**&lt;/span&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt;&lt;span class="err"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Atributo de "nombre", con valor de dicha cadena de texto la cual es la misma declarada en la propiedad "initialValues" de la instancia de Formik, para enlazar sus valores&lt;/span&gt;
        &lt;span class="err"&gt;**&lt;/span&gt;&lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;formik&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;values&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;email&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="err"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Atributo de "valor", con valo dentro de llaves por ser código de JS, siendo desde la instancia de Formik "formik", acceder a sus "valores" los cuales son los que se encuentran en la propiedad "initialValues" de la instancia de Formik, accediendo a la propiedad "email" de dicha propiedad "initialValues"&lt;/span&gt;
        &lt;span class="err"&gt;**&lt;/span&gt;&lt;span class="na"&gt;onChange&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;formik&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;handleChange&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="err"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad manejadora de ventos del evento de "cambio de valor" en éste input, con valor asignado de, dentro de llaves por ser código de JS, desde la instancia de Formik "formik", ejecutar su función manejadora de dicho evento la cual es una función interna de React que maneja el cambio de valor en el campo de entrada y actualiza el estado del componente &lt;/span&gt;
    &lt;span class="err"&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="nt"&gt;form&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;



&lt;h3&gt;
  
  
  EJEMPLO:
&lt;/h3&gt;



&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useFormik&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="s2"&gt;formik&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Se importa la función hook para el manejo de formularios, desde, la librería de "formik"&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&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="c1"&gt;//Se importa como valor por defecto, la declaración de función que será un componente y que ejecuta el siguiente bloque&lt;/span&gt;
    &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;formData&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;useFormik&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de constante que será el controlador del formulario, siendo una instancia de "Formik" que almacena el estado y las funciones relacionadas con el formulario con valor asignado de, la función hook "useFormik", que configura varias opciones importantes mediante un objeto que recibe como argumento un obejto que posee las siguientes propiedades&lt;/span&gt;
        &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="na"&gt;initialValues&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad del objeto, la cual será los valores iniciales de los inputs/controles del fomulario, con valor de un objeto con las siguientes propiedades&lt;/span&gt;
            &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="na"&gt;email&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="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad del objeto, que será el valor inicial para el control de "email", con valor asignado de, una cadena vacía &lt;/span&gt;
            &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="na"&gt;firstName&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="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad del objeto, que será el valor inicial para el control de "firstName", con valor asignado de, una cadena vacía &lt;/span&gt;
            &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="na"&gt;lastName&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="c1"&gt;//Propiedad del objeto, que será el valor inicial para el control de "lastName", con valor asignado de, una cadena vacía &lt;/span&gt;
        &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="na"&gt;onSubmit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;handleSubmit&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad del objeto, que será una función que se ejecutará cuando el formulario sea enviado, con valor asignado de, la función declarada para manejar el envío de los datos del formulario&lt;/span&gt;
    &lt;span class="o"&gt;**&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="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;handleSubmit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;values&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de función para manejar el envío de los datos del formulario, la cual recibe como argumento un objeto "values" que contiene los valores actuales de todos los campos del formulario, y que ejecuta el siguiente bloque&lt;/span&gt;
        &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;values&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//A la consola del navegador, se le aplica el métdo para imprir en la misma, los valores del dicho objeto "values" enviado como argumento&lt;/span&gt;
        &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;formData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;resetForm&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//A dicha instancia de "Formik" la cual hace referencia a los valores del formulario, se le aplica el método proporcionado por la misma instancia, para resetear el formulario y todos sus campos&lt;/span&gt;
    &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="c1"&gt;//Se retorna una estructura de JSX, el cual será la sección principal del componente a ser renderizado, siendo colocado entre paréntesis&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta contenedora de bloque
            &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;Basic Form&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; //Etiqueta de título principal, contiene texto a ser mostrado
            **&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;form&lt;/span&gt; &lt;span class="na"&gt;onSubmit&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;formData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;handleSubmit&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;** //Etiquta de formulario, la cual posee la propiedad manejadora de ventos del evento de "entregar/enviar" los datos del formulario, con valor asignado de, dentro de llaves por ser código de JS, desde la instancia de Formik "formik", ejecutar su función manejadora de dicho evento la cual hace refencia a la propiedad "onSubmit" de dicha instancia "formik"
                &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta contenedora de bloque
                    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;label&lt;/span&gt; &lt;span class="na"&gt;htmlFor&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Email&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;label&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta para etiquetar elementos de interfaz de usuario, posee el atributo "for" para enlazarla con el elemento correspondiente con valor de una cadena de texto la cual es la misma que el identificador del elemento a ser enlazado, y contiene texto
                    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;input&lt;/span&gt; &lt;span class="c1"&gt;//Etiqueta de ingreso de datos, la cual posee los siguientes atriutos y propiedades&lt;/span&gt;
                        &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt; &lt;span class="c1"&gt;//Selector identificador, con valor aignado de una cadena de texto, la cual es la misma que su "label" a enlazar&lt;/span&gt;
                        &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad de tipo, con valor para ser de "correo electrónico"&lt;/span&gt;
                        &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt; &lt;span class="c1"&gt;//Atributo de "nombre", con valor de dicha cadena de texto la cual es la misma declarada en la propiedad "initialValues" de la instancia de Formik, para enlazar sus valores&lt;/span&gt;
                        &lt;span class="err"&gt;**&lt;/span&gt;&lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;formData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;values&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;email&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="err"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Atributo de "valor", con valo dentro de llaves por ser código de JS, siendo desde la instancia de Formik "formData", acceder a sus "valores" los cuales son los que se encuentran en la propiedad "initialValues" de la instancia de Formik, accediendo a la propiedad "email" de dicha propiedad "initialValues" para obetener su valor&lt;/span&gt;
                        &lt;span class="err"&gt;**&lt;/span&gt;&lt;span class="na"&gt;onChange&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;formData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;handleChange&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="err"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad manejadora de ventos del evento de "cambio de valor" en éste input, con valor asignado de, dentro de llaves por ser código de JS, desde la instancia de Formik "formData", ejecutar su función manejadora de dicho evento la cual es una función interna de React que maneja el cambio de valor en el campo de entrada y actualiza el estado del componente &lt;/span&gt;
                        &lt;span class="na"&gt;required&lt;/span&gt; &lt;span class="c1"&gt;//"requerido" para ser un campo obligatorio y no puede enviarse vacío&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;div&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;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta contenedora de bloque
                    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;label&lt;/span&gt; &lt;span class="na"&gt;htmlFor&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"firstName"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;First Name&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;label&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta para etiquetar elementos de interfaz de usuario, posee el atributo "for" para enlazarla con el elemento correspondiente con valor de una cadena de texto la cual es la misma que el identificador del elemento a ser enlazado, y contiene texto
                    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;input&lt;/span&gt; &lt;span class="c1"&gt;//Etiqueta de ingreso de datos, la cual posee los siguientes atriutos y propiedades&lt;/span&gt;
                        &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"firstName"&lt;/span&gt; &lt;span class="c1"&gt;//Selector identificador, con valor aignado de una cadena de texto, la cual es la misma que su "label" a enlazar&lt;/span&gt;
                        &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad de tipo, con valor para ser de "texto"&lt;/span&gt;
                        &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"firstName"&lt;/span&gt; &lt;span class="c1"&gt;//Atributo de "nombre", con valor de dicha cadena de texto la cual es la misma declarada en la propiedad "initialValues" de la instancia de Formik, para enlazar sus valores&lt;/span&gt;
                        &lt;span class="err"&gt;**&lt;/span&gt;&lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;formData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;values&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;firstName&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="err"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Atributo de "valor", con valor dentro de llaves por ser código de JS, siendo desde la instancia de Formik "formData", acceder a sus "valores" los cuales son los que se encuentran en la propiedad "initialValues" de la instancia de Formik, accediendo a la propiedad "firstName" de dicha propiedad "initialValues" para obetener su valor&lt;/span&gt;
                        &lt;span class="err"&gt;**&lt;/span&gt;&lt;span class="na"&gt;onChange&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;formData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;handleChange&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="err"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad manejadora de ventos del evento de "cambio de valor" en éste input, con valor asignado de, dentro de llaves por ser código de JS, desde la instancia de Formik "formData", ejecutar su función manejadora de dicho evento la cual es una función interna de React que maneja el cambio de valor en el campo de entrada y actualiza el estado del componente &lt;/span&gt;
                        &lt;span class="na"&gt;required&lt;/span&gt; &lt;span class="c1"&gt;//"requerido" para ser un campo obligatorio y no puede enviarse vacío&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;div&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;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta contenedora de bloque
                    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;label&lt;/span&gt; &lt;span class="na"&gt;htmlFor&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"lastName"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Last Name&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;label&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta para etiquetar elementos de interfaz de usuario, posee el atributo "for" para enlazarla con el elemento correspondiente con valor de una cadena de texto la cual es la misma que el identificador del elemento a ser enlazado, y contiene texto
                    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;input&lt;/span&gt; &lt;span class="c1"&gt;//Etiqueta de ingreso de datos, la cual posee los siguientes atriutos y propiedades&lt;/span&gt;
                        &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"lastName"&lt;/span&gt; &lt;span class="c1"&gt;//Selector identificador, con valor aignado de una cadena de texto, la cual es la misma que su "label" a enlazar&lt;/span&gt;
                        &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad de tipo, con valor para ser de "texto"&lt;/span&gt;
                        &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"lastName"&lt;/span&gt; &lt;span class="c1"&gt;//Atributo de "nombre", con valor de dicha cadena de texto la cual es la misma declarada en la propiedad "initialValues" de la instancia de Formik, para enlazar sus valores&lt;/span&gt;
                        &lt;span class="err"&gt;**&lt;/span&gt;&lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;formData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;values&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;lastName&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="err"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Atributo de "valor", con valor dentro de llaves por ser código de JS, siendo desde la instancia de Formik "formData", acceder a sus "valores" los cuales son los que se encuentran en la propiedad "initialValues" de la instancia de Formik, accediendo a la propiedad "lastName" de dicha propiedad "initialValues" para obetener su valor&lt;/span&gt;
                        &lt;span class="err"&gt;**&lt;/span&gt;&lt;span class="na"&gt;onChange&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;formData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;handleChange&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="err"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad manejadora de ventos del evento de "cambio de valor" en éste input, con valor asignado de, dentro de llaves por ser código de JS, desde la instancia de Formik "formData", ejecutar su función manejadora de dicho evento la cual es una función interna de React que maneja el cambio de valor en el campo de entrada y actualiza el estado del componente &lt;/span&gt;
                        &lt;span class="na"&gt;required&lt;/span&gt; &lt;span class="c1"&gt;//"requerido" para ser un campo obligatorio y no puede enviarse vacío&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;div&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;button&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"submit"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Subscribe&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; //Etiqueta de botón, posee el atributo de "tipo" con valor de "entregar" para mandar los valores del formulario, y contiene texto
            &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;div&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;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  FORMA DINÁMICA DE USO:
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Los campos dependen de otros campos para ser mostrados, utilizando condicionales preferente utilizando el &lt;strong&gt;operador&lt;/strong&gt; *********************&lt;strong&gt;&lt;em&gt;ternario&lt;/em&gt;&lt;/strong&gt;********************* “ *********************&lt;strong&gt;&lt;em&gt;?  :&lt;/em&gt;&lt;/strong&gt;********************* ”&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Se hacen validaciones:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dentro de la instancia creada de Formik al usar el hook “***************&lt;strong&gt;&lt;em&gt;useFormik&lt;/em&gt;&lt;/strong&gt;************&lt;strong&gt;&lt;em&gt;”, se puede colocar la propiedad “&lt;/em&gt;&lt;/strong&gt;**********&lt;strong&gt;&lt;em&gt;validate&lt;/em&gt;&lt;/strong&gt;*************” la cual manejará las validaciones de los campos del formulario.&lt;/li&gt;
&lt;li&gt;Dicha propiedad puede recibir como valor una función de flecha callback o la referencia de una función creada para manejar las validaciones del formulario la cual puede ser nombrada arbitrariamente.

&lt;ul&gt;
&lt;li&gt;Dicha función para manejar las validaciones del formulario recibe como argumento   un objeto "&lt;strong&gt;values&lt;/strong&gt;" que contiene los valores actuales de todos los campos del formulario.&lt;/li&gt;
&lt;li&gt;Dicha función para manejar las validaciones del formulario, ejecuta la declaración de una constante “*********&lt;strong&gt;&lt;em&gt;errors&lt;/em&gt;&lt;/strong&gt;*********” la cual va a contener los mensajes de errores al cumplir una condición validación, ésta constante tiene valor asignado de un objeto.&lt;/li&gt;
&lt;li&gt;El objeto de la constante “*********&lt;strong&gt;&lt;em&gt;errors&lt;/em&gt;&lt;/strong&gt;*********” recibirá sus propiedades y valores al cumplirse una condición de validación, para ello:

&lt;ol&gt;
&lt;li&gt;Lo que ejecuta la  condición es acceder al objeto “*********&lt;strong&gt;&lt;em&gt;errors&lt;/em&gt;&lt;/strong&gt;*********”.&lt;/li&gt;
&lt;li&gt;Colocar el nombre del control del formulario de cuál se está haciendo la validación, siendo el mismo nombre que se encuentra en la propiedad “&lt;strong&gt;initialValues&lt;/strong&gt;” de la instancia de Formik.&lt;/li&gt;
&lt;li&gt;Asignar como valor, una cadena de texto que será mostrada al cumplir la condición de validación.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Después se crean las condicionales para validar cada control del formulario, accediendo al objeto “&lt;strong&gt;values&lt;/strong&gt;” y al nombre del control que se encuentra en la propiedad “&lt;strong&gt;initialValues&lt;/strong&gt;” de la instancia de Formik, así creando una validación personalizada.&lt;/li&gt;
&lt;li&gt;Finalmente se **********&lt;strong&gt;&lt;em&gt;&lt;strong&gt;&lt;em&gt;retorna&lt;/em&gt;&lt;/strong&gt;&lt;/em&gt;&lt;/strong&gt;********** el objeto “******&lt;strong&gt;&lt;em&gt;&lt;strong&gt;&lt;em&gt;errors&lt;/em&gt;&lt;/strong&gt;&lt;/em&gt;&lt;/strong&gt;******” con todas sus propiedades y valores dependientes de las condicionales para validar los valores de los controles del formulario.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  EJEMPLO:
&lt;/h3&gt;



&lt;pre class="highlight jsx"&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;useFormik&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="s2"&gt;formik&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;  &lt;span class="c1"&gt;//Se importa la función hook para el manejo de formularios, desde, la librería de "formik"&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&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="c1"&gt;//Se exporta como valor por defecto, la declaración de función que será un componente, la cual ejecuta el siguiente bloque&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;formData&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;useFormik&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de constante que será el controlador del formulario, siendo una instancia de "Formik" que almacena el estado y las funciones relacionadas con el formulario con valor asignado de, la función hook "useFormik", que configura varias opciones importantes mediante un objeto que recibe como argumento un obejto que posee las siguientes propiedades&lt;/span&gt;
        &lt;span class="na"&gt;initialValues&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad del objeto, la cual será los valores iniciales de los inputs/controles del fomulario, con valor de un objeto con las siguientes propiedades&lt;/span&gt;
            &lt;span class="na"&gt;email&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="c1"&gt;//Propiedad del objeto, que será el valor inicial para el control de "email", con valor asignado de, una cadena vacía &lt;/span&gt;
            &lt;span class="na"&gt;firstName&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="c1"&gt;//Propiedad del objeto, que será el valor inicial para el control de "firstName", con valor asignado de, una cadena vacía &lt;/span&gt;
            &lt;span class="na"&gt;lastName&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="c1"&gt;//Propiedad del objeto, que será el valor inicial para el control de "lastName", con valor asignado de, una cadena vacía &lt;/span&gt;
            &lt;span class="na"&gt;termsAccepted&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad del objeto, que será el valor inicial para el control de "termsAccepted", con valor asignado de, una cadena vacía &lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="na"&gt;onSubmit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;handleSubmit&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad del objeto, que será una función que se ejecutará cuando el formulario sea enviado, con valor asignado de, la función declarada para manejar el envío de los datos del formulario&lt;/span&gt;
        &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="na"&gt;validate&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;handleValidate&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad del objeto, que manejará las validaciones de los campos del formulario, con valor asignado de, la función declarada para manejar las validaciones de los campos del formulario.&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;

    &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;handleSubmit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;values&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de función para manejar el envío de los datos del formulario, la cual recibe como argumento un objeto "values" que contiene los valores actuales de todos los campos del formulario, y que ejecuta el siguiente bloque&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;values&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;//A la consola del navegador, se le aplica el métdo para imprir en la misma, los valores del dicho objeto "values" enviado como argumento&lt;/span&gt;
        &lt;span class="nx"&gt;formData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;resetForm&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;  &lt;span class="c1"&gt;//A dicha instancia de "Formik" la cual hace referencia a los valores del formulario, se le aplica el método proporcionado por la misma instancia, para resetear el formulario y todos sus campos&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;handleValidate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;values&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de función para manejar las validaciones de los campos del formulario., la cual recibe como argumento un objeto "values" que contiene los valores actuales de todos los campos del formulario, y que ejecuta el siguiente bloque&lt;/span&gt;
        &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;errors&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{};&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de constante con valor asignado de, un objeto, la cual va a contener los mensajes de errores al cumplir una condición validación&lt;/span&gt;

        &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;values&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;termsAccepted&lt;/span&gt; &lt;span class="o"&gt;===&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="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Condicional que valida si, del objeto de valores del formulario, acceder al valor del control "termsAccepted", es estrictamente igual, que el valor booleano "false", ejecutando el siguiente bloque&lt;/span&gt;
            &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;errors&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;termsAccepted&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;You must accept the terms&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Se accede a la constante objeto que contendrá los errores por validaciones, asignando una nueva propiedad que hace referencia al control "termsAccepted", con valor asignado de, la cadena de texto "Required", para indicar que es requerido por estar vacío&lt;/span&gt;
        &lt;span class="o"&gt;**&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="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;values&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;firstName&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&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="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Condicional que valida si, del objeto de valores del formulario, acceder al valor del control "firstName", y obtener su longitud, es estrictamente igual, que el valor numérico 0, ejecutando el siguiente bloque&lt;/span&gt;
            &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;errors&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;firstName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Required&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Se accede a la constante objeto que contendrá los errores por validaciones, asignando una nueva propiedad que hace referencia al control "firstName", con valor asignado de, la cadena de texto "Required", para indicar que es requerido por estar vacío&lt;/span&gt;
                        &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;values&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;firstName&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&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="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Si no se cumple la condición anterior, significando que si se validó con éxito, ahora se valida si, del objeto de valores del formulario, acceder al valor del control "firstName", y obtener su longitud, es menor que el valor numérico 2, ejecutando el siguiente bloque&lt;/span&gt;
            &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;errors&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;firstName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Should be more than 2 characters&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Se accede a la constante objeto que contendrá los errores por validaciones, asignando una nueva propiedad que hace referencia al control "firstName", con valor asignado de, la cadena de texto "Should be more than 2 characters", para indicar que el valor ingresado debe ser mayor que dos carácteres&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;values&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;lastName&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&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="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Condicional que valida si, del objeto de valores del formulario, acceder al valor del control "lastName", y obtener su longitud, es estrictamente igual, que el valor numérico 0, ejecutando el siguiente bloque&lt;/span&gt;
            &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;errors&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;lastName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Required&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Se accede a la constante objeto que contendrá los errores por validaciones, asignando una nueva propiedad que hace referencia al control "lastName", con valor asignado de, la cadena de texto "Required", para indicar que es requerido por estar vacío&lt;/span&gt;
        &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;values&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;lastName&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&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="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Si no se cumple la condición anterior, significando que si se validó con éxito, ahora se valida si, del objeto de valores del formulario, acceder al valor del control "lastName", y obtener su longitud, es menor que el valor numérico 2, ejecutando el siguiente bloque&lt;/span&gt;
            &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;errors&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;lastName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Should be more than 2 characters&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Se accede a la constante objeto que contendrá los errores por validaciones, asignando una nueva propiedad que hace referencia al control "lastName", con valor asignado de, la cadena de texto "Should be more than 2 characters", para indicar que el valor ingresado debe ser mayor que dos carácteres&lt;/span&gt;
        &lt;span class="o"&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="nx"&gt;values&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;email&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&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="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Condicional que valida si, del objeto de valores del formulario, acceder al valor del control "email", y obtener su longitud, es estrictamente igual, que el valor numérico 0, ejecutando el siguiente bloque&lt;/span&gt;
            &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;errors&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;email&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Required&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Se accede a la constante objeto que contendrá los errores por validaciones, asignando una nueva propiedad que hace referencia al control "email", con valor asignado de, la cadena de texto "Required", para indicar que es requerido por estar vacío&lt;/span&gt;
        &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="se"&gt;[&lt;/span&gt;&lt;span class="sr"&gt;a-z0-9&lt;/span&gt;&lt;span class="se"&gt;]&lt;/span&gt;&lt;span class="sr"&gt;+@&lt;/span&gt;&lt;span class="se"&gt;[&lt;/span&gt;&lt;span class="sr"&gt;a-z&lt;/span&gt;&lt;span class="se"&gt;]&lt;/span&gt;&lt;span class="sr"&gt;+&lt;/span&gt;&lt;span class="se"&gt;\.[&lt;/span&gt;&lt;span class="sr"&gt;a-z&lt;/span&gt;&lt;span class="se"&gt;]{2,3}&lt;/span&gt;&lt;span class="sr"&gt;/i&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;test&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;values&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;email&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Si no se cumple la condición anterior, significando que si se validó con éxito, ahora se valida si, NO("!/") se cumple la expresión regular "[a-z0-9]", Coincide con uno o más caracteres alfabéticos en minúsculas o dígitos, "@" Coincide con el carácter "@", "[a-z]" Coincide con uno o más caracteres alfabéticos en minúsculas (dominio), "\." Coincide con el carácter punto ("."), "[a-z]{2,3}" Coincide con dos o tres caracteres alfabéticos en minúsculas (extensión de dominio), el modificador "i" al final de la expresión regular indica que la coincidencia no debe ser sensible a mayúsculas y minúsculas, siendo que a dicha expresión regular se le aplica el método de "probar" dicha expresión regular, la cual recibe como argumento, del objeto de valores del formulario, acceder al valor del control "email", para obtener dicho valor y problarlo para validarlo, para asegurarse de que tenga un formato válido, ejecutando el siguiente bloque si se cumple la condición anterior&lt;/span&gt;
            &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;errors&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;email&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Invalid email&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Se accede a la constante objeto que contendrá los errores por validaciones, asignando una nueva propiedad que hace referencia al control "email", con valor asignado de, la cadena de texto "Invalid ****email", para indicar que no es un formato válido de correo electróico&lt;/span&gt;
        &lt;span class="o"&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;errors&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Se retorna, el objeto de errores con todas sus propiedades y valores asignadas pependiendo de los resultados de las condicionales para validar los valores de los controles del formulario&lt;/span&gt;
    &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;

        &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;handleDisabled&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de función para manejar el comportamiento de habilitar el botón para enviar los datos del formulario, la cual ejecuta el siguiente bloque&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;keys&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;formData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;errors&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="c1"&gt;//Se retorna el resultado de dos condiciones siendo, desde la clase "Object" ejecutar su método "keys" para obtener un arreglo de las propiedades (claves) de un objeto, el cual recibe como argumento, de la instacia de Forimik "formData", acceder al objeto de errores de validaciones, la cual es accedida automáticamente mediante la propiedad "validate" de la instancia de Formirk que ejecuta la función asociada "handleValidate" que retorna el objeto "errors", y obtener su longitud que representa la cantidad de errores de validación presentes para validar si es mayor que 0 lo que significa que hay errores, O, la siguiente condición&lt;/span&gt;
        &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;values&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;formData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;values&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;every&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;//Negar(invertir) el resultado de, desde la clase "Object" ejecutar su método "values" para obtener un arreglo de los valores de las propiedades de un objeto, el cual recibe como argumento, de la instacia de Forimik "formData", acceder a sus "valores" los cuales son los que se encuentran en la propiedad "initialValues" de la instancia de Formik, y aplicar el método "every" que verifica si todos los elementos de un arreglo cumplen con cierta condición, siendo cada uno de los valores dentro del objeto "initialValues", el cual recibe como argumento una función flecha callback, la cual ejecuta, por cada valor dentro del arreglo obtenido del objeto "formData.values", retornar el mismo valor, así para verificar si todos los valores en el objeto "formData.values" son verdaderos, siendo que si todos los valores son verdaderos, la función "every" devolverá "true", si al menos un valor es falso, la función "every" devolverá "false", al agregar la negación "!" al principio, se invierte el resultado, por lo que la expresión completa evalúa si al menos un valor es "falso"&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="c1"&gt;//Se retorna una estructura de JSX, el cual será la sección principal del componente a ser renderizado, siendo colocado entre paréntesis&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta contenedora de bloque
            &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;Dynamic Form&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; //Etiqueta de título principal, contiene texto
            **&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;form&lt;/span&gt; &lt;span class="na"&gt;onSubmit&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;formData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;handleSubmit&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;** //Etiquta de formulario, la cual posee la propiedad manejadora de ventos del evento de "entregar/enviar" los datos del formulario, con valor asignado de, dentro de llaves por ser código de JS, desde la instancia de Formik "formData", ejecutar su función manejadora de dicho evento la cual hace refencia a la propiedad "onSubmit" de dicha instancia "formData"
                &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta contenedora de bloque
                    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;label&lt;/span&gt; &lt;span class="na"&gt;htmlFor&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"termsAccepted"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Accept Terms&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;label&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta para etiquetar elementos de interfaz de usuario, posee el atributo "for" para enlazarla con el elemento correspondiente con valor de una cadena de texto la cual es la misma que el identificador del elemento a ser enlazado, y contiene texto
                    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;input&lt;/span&gt; &lt;span class="c1"&gt;//Etiqueta de ingreso de datos, la cual posee los siguientes atriutos y propiedades&lt;/span&gt;
                        &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"checkbox"&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad de tipo, con valor para ser de "caja de selección"&lt;/span&gt;
                        &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"termsAccepted"&lt;/span&gt; &lt;span class="c1"&gt;//Atributo de "nombre", con valor de dicha cadena de texto la cual es la misma declarada en la propiedad "initialValues" de la instancia de Formik, para enlazar sus valores&lt;/span&gt;
                        &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"termsAccepted"&lt;/span&gt; &lt;span class="c1"&gt;//Selector identificador, con valor aignado de una cadena de texto, la cual es la misma que su "label" a enlazar&lt;/span&gt;
                        &lt;span class="na"&gt;checked&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;formData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;values&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;termsAccepted&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad de "comprobado/seleccionado", con valor dentro de llaves por ser código de JS, desde la instancia de Formik "formData", acceder a sus "valores" los cuales son los que se encuentran en la propiedad "initialValues" de la instancia de Formik, accediendo a la propiedad "termsAccepted" de dicha propiedad "initialValues" para obetener su valor y controlar su comportamiento dependiendo de dicho valor&lt;/span&gt;
                        &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;formData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;values&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;termsAccepted&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="c1"&gt;//Atributo de "valor", con valor dentro de llaves por ser código de JS, desde la instancia de Formik "formData", acceder a sus "valores" los cuales son los que se encuentran en la propiedad "initialValues" de la instancia de Formik, accediendo a la propiedad "termsAccepted" de dicha propiedad "initialValues" para obetener su valor y controlar su comportamiento dependiendo de dicho valor&lt;/span&gt;
                        &lt;span class="na"&gt;onChange&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;formData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;handleChange&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad manejadora de ventos del evento de "cambio de valor" en éste input, con valor asignado de, dentro de llaves por ser código de JS, desde la instancia de Formik "formData", ejecutar su función manejadora de dicho evento la cual es una función interna de React que maneja el cambio de valor en el campo de entrada y actualiza el estado del componente &lt;/span&gt;
                        &lt;span class="na"&gt;required&lt;/span&gt; &lt;span class="c1"&gt;//"requerido" para ser un campo obligatorio y no puede enviarse vacío&lt;/span&gt;
                    &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;

                    **&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;formData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;errors&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;termsAccepted&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Dentro de llaves por se código de JS, se utiliza el operador ternario, que valida, si, desde la instancia de Formik "formData", acceder al objeto de errores de validaciones, la cual es accedida automáticamente mediante la propiedad "validate" de la instancia de Formirk que ejecuta la función asociada "handleValidate" que retorna el objeto "errors", del cual se accede a su propiedad "termsAccepted" ejecutando las validaciones correspondientes mediante las condicionales, siendo que si alguna de ellas se cumple con su valor booleano "true", ejecuta el siguiente bloque, el cual es una estructura JSX&lt;/span&gt;
                        &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;red&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;** //Etiqueta contendora de bloque, con la propiedad de "estilos" con valor asignado dentro de llaves por ser código de JS, dentro de un objeto, colocar la propiedad de color de texto con valor asignado del color rojo, para todo los elementos dentro de dicho contenedor, el cual contiene lo siguiente
                            **&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;formData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;errors&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;termsAccepted&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;** //Dentro de llaves por ser código de JS, desde la instancia de Formik "formData", acceder al objeto de errores de validaciones, la cual es accedida automáticamente mediante la propiedad "validate" de la instancia de Formirk que ejecuta la función asociada "handleValidate" que retorna el objeto "errors", del cual se accede a su propiedad "termsAccepted" ejecutando las validaciones correspondientes mediante las condicionales, siendo que si alguna de ellas se cumple, se mostrará el valor de la condición que se ejecute, la cual es alguna validación que no ha sido exitosa
                        **&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&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="kc"&gt;null&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;** //Si no se cumple la condición ternaria, se ejecuta un valor nulo para no mostrar nada, lo que significa que no hubo errores al validar el campo
                &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&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;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta contenedora de bloque
                    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;label&lt;/span&gt; &lt;span class="na"&gt;htmlFor&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Email&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;label&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta para etiquetar elementos de interfaz de usuario, posee el atributo "for" para enlazarla con el elemento correspondiente con valor de una cadena de texto la cual es la misma que el identificador del elemento a ser enlazado, y contiene texto
                    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;input&lt;/span&gt; &lt;span class="c1"&gt;//Etiqueta de ingreso de datos, la cual posee los siguientes atributos y propiedades&lt;/span&gt;
                        &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt; &lt;span class="c1"&gt;//Selector identificador, con valor aignado de una cadena de texto, la cual es la misma que su "label" a enlazar&lt;/span&gt;
                        &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad de tipo, con valor para ser de "correo electrónico"&lt;/span&gt;
                        &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt; &lt;span class="c1"&gt;//Atributo de "nombre", con valor de dicha cadena de texto la cual es la misma declarada en la propiedad "initialValues" de la instancia de Formik, para enlazar sus valores&lt;/span&gt;
                        &lt;span class="na"&gt;placeholder&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"sample@mail.com"&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad de texto demostrativo, con valor de una cadena de texto a ser mostrada&lt;/span&gt;
                        &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;formData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;values&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;email&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="c1"&gt;//Atributo de "valor", con valor dentro de llaves por ser código de JS, desde la instancia de Formik "formData", acceder a sus "valores" los cuales son los que se encuentran en la propiedad "initialValues" de la instancia de Formik, accediendo a la propiedad "email" de dicha propiedad "initialValues" para obetener su valor y controlar su comportamiento dependiendo de dicho valor&lt;/span&gt;
                        &lt;span class="na"&gt;onChange&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;formData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;handleChange&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad manejadora de ventos del evento de "cambio de valor" en éste input, con valor asignado de, dentro de llaves por ser código de JS, desde la instancia de Formik "formData", ejecutar su función manejadora de dicho evento la cual es una función interna de React que maneja el cambio de valor en el campo de entrada y actualiza el estado del componente &lt;/span&gt;
                        &lt;span class="na"&gt;onBlur&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;formData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;handleBlur&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad manejadora de ventos del evento de "desenfoque" en éste input, con valor asignado de, dentro de llaves por ser código de JS, desde la instancia de Formik "formData", ejecutar su función manejadora de dicho evento la cual es una función interna de React que maneja el desenfoque del elemento y actualiza el estado del componente &lt;/span&gt;
                        &lt;span class="na"&gt;required&lt;/span&gt; &lt;span class="c1"&gt;//"requerido" para ser un campo obligatorio y no puede enviarse vacío&lt;/span&gt;
                    &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;

                    **&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;formData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;touched&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;email&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;**&lt;/span&gt; &lt;span class="c1"&gt;//Dentro de llaves por se código de JS, se ejecutan dos condiciones que deben ser cumplidas al mismo  tiempo, siendo la primera, desde la instancia de Formik "formData", acceder a su propiedad "touched" que verifica si algún campo/control del formulario ha sido "tocado" o interactuado por el usuario (en términos de enfoque y pérdida de enfoque) para mostrar el error después de perder el enfoque del campo, siendo el campo/control "email", y al mismo tiempo mediante el operador "and/&amp;amp;&amp;amp;"&lt;/span&gt;
                    &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;formData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;errors&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;email&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Se utiliza el operador ternario, que valida, si, desde la instancia de Formik "formData", acceder al objeto de errores de validaciones, la cual es accedida automáticamente mediante la propiedad "validate" de la instancia de Formirk que ejecuta la función asociada "handleValidate" que retorna el objeto "errors", del cual se accede a su propiedad "email" ejecutando las validaciones correspondientes mediante las condicionales, siendo que si alguna de ellas se cumple con su valor booleano "true", ejecuta el siguiente bloque, el cual es una estructura JSX&lt;/span&gt;
                        &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;red&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;** //Etiqueta contendora de bloque, con la propiedad de "estilos" con valor asignado dentro de llaves por ser código de JS, dentro de un objeto, colocar la propiedad de color de texto con valor asignado del color rojo, para todo los elementos dentro de dicho contenedor, el cual contiene lo siguiente
                            **&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;formData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;errors&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;email&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;** //Dentro de llaves por ser código de JS, desde la instancia de Formik "formData", acceder al objeto de errores de validaciones, la cual es accedida automáticamente mediante la propiedad "validate" de la instancia de Formirk que ejecuta la función asociada "handleValidate" que retorna el objeto "errors", del cual se accede a su propiedad "email" ejecutando las validaciones correspondientes mediante las condicionales, siendo que si alguna de ellas se cumple, se mostrará el valor de la condición que se ejecute, la cual es alguna validación que no ha sido exitosa
                        **&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&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="kc"&gt;null&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;** //Si no se cumple la condición ternaria, se ejecuta un valor nulo para no mostrar nada, lo que significa que no hubo errores al validar el campo
                &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;

                **&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;formData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;errors&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;email&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;**&lt;/span&gt; &lt;span class="c1"&gt;//Dentro de llaves por se código de JS, se ejecutan dos condiciones que deben ser cumplidas al mismo tiempo, siendo la primera, negar/invertir el valor obtenido de, desde la instancia de Formik "formData", acceder al objeto de errores de validaciones, la cual es accedida automáticamente mediante la propiedad "validate" de la instancia de Formirk que ejecuta la función asociada "handleValidate" que retorna el objeto "errors", del cual se accede a su propiedad "email" ejecutando las validaciones correspondientes mediante las condicionales, siendo que si alguna de ellas se cumple, será invertido el valor "true" por "false" para que no se cumpla la condición, y al mismo tiempo mediante el operador "and/&amp;amp;&amp;amp;"&lt;/span&gt;
                &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;formData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;values&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;termsAccepted&lt;/span&gt; &lt;span class="o"&gt;===&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="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Desde la instancia de Formik "formData", acceder a sus "valores" los cuales son los que se encuentran en la propiedad "initialValues" de la instancia de Formik, accediendo a la propiedad "termsAccepted" de dicha propiedad "initialValues" para obetener su valor, y validar si es estrictamente igual que, el valor booleano "true", éstas dos condiciones se deden de cumplir para, retornar una estructura de JSX, siendo colocado entre paréntesis&lt;/span&gt;
                    &lt;span class="p"&gt;&amp;lt;&amp;gt;&lt;/span&gt; //Fragmento de React para contener el componente sin ser renderizado dentro de otro elemento
                        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta contenedora de bloque
                            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;label&lt;/span&gt; &lt;span class="na"&gt;htmlFor&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"firstName"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;First Name&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;label&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta para etiquetar elementos de interfaz de usuario, posee el atributo "for" para enlazarla con el elemento correspondiente con valor de una cadena de texto la cual es la misma que el identificador del elemento a ser enlazado, y contiene texto
                            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;input&lt;/span&gt; &lt;span class="c1"&gt;//Etiqueta de ingreso de datos, la cual posee los siguientes atributos y propiedades&lt;/span&gt;
                                &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad de tipo, con valor para ser de "texto"&lt;/span&gt;
                                &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"firstName"&lt;/span&gt; &lt;span class="c1"&gt;//Atributo de "nombre", con valor de dicha cadena de texto la cual es la misma declarada en la propiedad "initialValues" de la instancia de Formik, para enlazar sus valores&lt;/span&gt;
                                &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"firstName"&lt;/span&gt; &lt;span class="c1"&gt;//Selector identificador, con valor aignado de una cadena de texto, la cual es la misma que su "label" a enlazar&lt;/span&gt;
                                &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;formData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;values&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;firstName&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="c1"&gt;//Atributo de "valor", con valor dentro de llaves por ser código de JS, desde la instancia de Formik "formData", acceder a sus "valores" los cuales son los que se encuentran en la propiedad "initialValues" de la instancia de Formik, accediendo a la propiedad "firstName" de dicha propiedad "initialValues" para obtener su valor y controlar su el valor mostrado dependiendo de dicho valor&lt;/span&gt;
                                &lt;span class="na"&gt;onChange&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;formData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;handleChange&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad manejadora de ventos del evento de "cambio de valor" en éste input, con valor asignado de, dentro de llaves por ser código de JS, desde la instancia de Formik "formData", ejecutar su función manejadora de dicho evento la cual es una función interna de React que maneja el cambio de valor en el campo de entrada y actualiza el estado del componente&lt;/span&gt;
                                &lt;span class="na"&gt;onBlur&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;formData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;handleBlur&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad manejadora de ventos del evento de "desenfoque" en éste input, con valor asignado de, dentro de llaves por ser código de JS, desde la instancia de Formik "formData", ejecutar su función manejadora de dicho evento la cual es una función interna de React que maneja el desenfoque del elemento y actualiza el estado del componente&lt;/span&gt;
                                &lt;span class="na"&gt;required&lt;/span&gt; &lt;span class="c1"&gt;//"requerido" para ser un campo obligatorio y no puede enviarse vacío&lt;/span&gt;
                            &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;

                            **&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;formData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;touched&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;firstName&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;**&lt;/span&gt; &lt;span class="c1"&gt;//Dentro de llaves por se código de JS, se ejecutan dos condiciones que deben ser cumplidas al mismo  tiempo, siendo la primera, desde la instancia de Formik "formData", acceder a su propiedad "touched" que verifica si algún campo/control del formulario ha sido "tocado" o interactuado por el usuario (en términos de enfoque y pérdida de enfoque) para mostrar el error después de perder el enfoque del campo, siendo el campo/control "firstName", y al mismo tiempo mediante el operador "and/&amp;amp;&amp;amp;"&lt;/span&gt;
                            &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;formData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;errors&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;firstName&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Se utiliza el operador ternario, que valida, si, desde la instancia de Formik "formData", acceder al objeto de errores de validaciones, la cual es accedida automáticamente mediante la propiedad "validate" de la instancia de Formirk que ejecuta la función asociada "handleValidate" que retorna el objeto "errors", del cual se accede a su propiedad "firstName" ejecutando las validaciones correspondientes mediante las condicionales, siendo que si alguna de ellas se cumple con su valor booleano "true", ejecuta el siguiente bloque, el cual es una estructura JSX&lt;/span&gt;
                                &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;red&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;** //Etiqueta contendora de bloque, con la propiedad de "estilos" con valor asignado dentro de llaves por ser código de JS, dentro de un objeto, colocar la propiedad de color de texto con valor asignado del color rojo, para todo los elementos dentro de dicho contenedor, el cual contiene lo siguiente
                                    **&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;formData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;errors&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;firstName&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;** //Dentro de llaves por ser código de JS, desde la instancia de Formik "formData", acceder al objeto de errores de validaciones, la cual es accedida automáticamente mediante la propiedad "validate" de la instancia de Formirk que ejecuta la función asociada "handleValidate" que retorna el objeto "errors", del cual se accede a su propiedad "firstName" ejecutando las validaciones correspondientes mediante las condicionales, siendo que si alguna de ellas se cumple, se mostrará el valor de la condición que se ejecute, la cual es alguna validación que no ha sido exitosa
                                **&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&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="kc"&gt;null&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;** //Si no se cumple la condición ternaria, se ejecuta un valor nulo para no mostrar nada, lo que significa que no hubo errores al validar el campo
                        &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&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;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta contenedora de bloque
                            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;label&lt;/span&gt; &lt;span class="na"&gt;htmlFor&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"lastName"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Last Name&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;label&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta para etiquetar elementos de interfaz de usuario, posee el atributo "for" para enlazarla con el elemento correspondiente con valor de una cadena de texto la cual es la misma que el identificador del elemento a ser enlazado, y contiene texto
                            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;input&lt;/span&gt; &lt;span class="c1"&gt;//Etiqueta de ingreso de datos, la cual posee los siguientes atributos y propiedades&lt;/span&gt;
                                &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad de tipo, con valor para ser de "texto"&lt;/span&gt;

                                &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"lastName"&lt;/span&gt; &lt;span class="c1"&gt;//Atributo de "nombre", con valor de dicha cadena de texto la cual es la misma declarada en la propiedad "initialValues" de la instancia de Formik, para enlazar sus valores&lt;/span&gt;
                                &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"lastName"&lt;/span&gt; &lt;span class="c1"&gt;//Selector identificador, con valor aignado de una cadena de texto, la cual es la misma que su "label" a enlazar&lt;/span&gt;
                                &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;formData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;values&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;lastName&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="c1"&gt;//Atributo de "valor", con valor dentro de llaves por ser código de JS, desde la instancia de Formik "formData", acceder a sus "valores" los cuales son los que se encuentran en la propiedad "initialValues" de la instancia de Formik, accediendo a la propiedad "lastName" de dicha propiedad "initialValues" para obtener su valor y controlar su el valor mostrado dependiendo de dicho valor&lt;/span&gt;
                                &lt;span class="na"&gt;onChange&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;formData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;handleChange&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad manejadora de ventos del evento de "cambio de valor" en éste input, con valor asignado de, dentro de llaves por ser código de JS, desde la instancia de Formik "formData", ejecutar su función manejadora de dicho evento la cual es una función interna de React que maneja el cambio de valor en el campo de entrada y actualiza el estado del componente&lt;/span&gt;
                                &lt;span class="na"&gt;onBlur&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;formData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;handleBlur&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad manejadora de ventos del evento de "desenfoque" en éste input, con valor asignado de, dentro de llaves por ser código de JS, desde la instancia de Formik "formData", ejecutar su función manejadora de dicho evento la cual es una función interna de React que maneja el desenfoque del elemento y actualiza el estado del componente&lt;/span&gt;
                                &lt;span class="na"&gt;required&lt;/span&gt; &lt;span class="c1"&gt;//"requerido" para ser un campo obligatorio y no puede enviarse vacío&lt;/span&gt;
                            &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;

                            **&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;formData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;touched&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;lastName&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;**&lt;/span&gt; &lt;span class="c1"&gt;//Dentro de llaves por se código de JS, se ejecutan dos condiciones que deben ser cumplidas al mismo  tiempo, siendo la primera, desde la instancia de Formik "formData", acceder a su propiedad "touched" que verifica si algún campo/control del formulario ha sido "tocado" o interactuado por el usuario (en términos de enfoque y pérdida de enfoque) para mostrar el error después de perder el enfoque del campo, siendo el campo/control "lastName", y al mismo tiempo mediante el operador "and/&amp;amp;&amp;amp;"&lt;/span&gt;
                            &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;formData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;errors&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;lastName&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Se utiliza el operador ternario, que valida, si, desde la instancia de Formik "formData", acceder al objeto de errores de validaciones, la cual es accedida automáticamente mediante la propiedad "validate" de la instancia de Formirk que ejecuta la función asociada "handleValidate" que retorna el objeto "errors", del cual se accede a su propiedad "lastName" ejecutando las validaciones correspondientes mediante las condicionales, siendo que si alguna de ellas se cumple con su valor booleano "true", ejecuta el siguiente bloque, el cual es una estructura JSX&lt;/span&gt;
                                &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;red&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;** //Etiqueta contendora de bloque, con la propiedad de "estilos" con valor asignado dentro de llaves por ser código de JS, dentro de un objeto, colocar la propiedad de color de texto con valor asignado del color rojo, para todo los elementos dentro de dicho contenedor, el cual contiene lo siguiente
                                    **&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;formData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;errors&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;lastName&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;** //Dentro de llaves por ser código de JS, desde la instancia de Formik "formData", acceder al objeto de errores de validaciones, la cual es accedida automáticamente mediante la propiedad "validate" de la instancia de Formirk que ejecuta la función asociada "handleValidate" que retorna el objeto "errors", del cual se accede a su propiedad "lastName" ejecutando las validaciones correspondientes mediante las condicionales, siendo que si alguna de ellas se cumple, se mostrará el valor de la condición que se ejecute, la cual es alguna validación que no ha sido exitosa
                                **&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&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="kc"&gt;null&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;** //Si no se cumple la condición ternaria, se ejecuta un valor nulo para no mostrar nada, lo que significa que no hubo errores al validar el campo
                        &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
                    &lt;span class="p"&gt;&amp;lt;/&amp;gt;&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="kc"&gt;null&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;** //Si no se cumple la condición ternaria, se ejecuta un valor nulo para no mostrar nada, lo que significa que no se han aceptado los terminos y no se ha escrito un correo electrónico

                &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="c1"&gt;//Etiqueta de botón, que se encargará de mandar los datos del formulario, contiene los siguiente atributos y propiedades&lt;/span&gt;
                    &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"submit"&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad de tipo, con valor para ser de "entregar/mandar"&lt;/span&gt;
                    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"submit"&lt;/span&gt; &lt;span class="c1"&gt;//Atributo de "nombre", con valor de dicha cadena de texto la cual serán mandada con los datos del formulario&lt;/span&gt;
                    &lt;span class="na"&gt;disabled&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;handleDisabled&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Propiedad de "desactivado", con valor asignado dentro de llaves por ser código de JS, de llamar a ejecutar dicha función para habilitar el botón dependiendo del buen llenado de los campos del formulario
                    Subscribe //Contiene texto a ser mostrado
                &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;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;div&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;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  CÓDIGO REFACTORIZADO:
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Funciones y componentes de Formik:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;getFieldsProps() function:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Permite reducir props repetido como &lt;strong&gt;name&lt;/strong&gt;, &lt;strong&gt;value&lt;/strong&gt;, &lt;strong&gt;onChange&lt;/strong&gt;, &lt;strong&gt;onBlur.&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Como propiedad de un elementos, dentro de llaves “*&lt;strong&gt;&lt;em&gt;{}&lt;/em&gt;&lt;/strong&gt;&lt;em&gt;” por ser código de JS, se colocan la sintaxis de spread operator “&lt;/em&gt;&lt;em&gt;…&lt;/em&gt;&lt;em&gt;” para extender todas las propiedades en el control, seguido del nombre de la instancia de Formik, y ejecutando su método “&lt;/em&gt;&lt;em&gt;getFieldsProps()&lt;/em&gt;*”.&lt;/li&gt;
&lt;li&gt;Como argumentos para la función “&lt;strong&gt;getFieldsProps()&lt;/strong&gt;”, se recibe el valor de la propiedad “*****&lt;strong&gt;&lt;em&gt;name&lt;/em&gt;&lt;/strong&gt;**&lt;em&gt;**” correspondiente al elemento/control, el cual se definió en la propiedad “&lt;/em&gt;&lt;em&gt;initialValues&lt;/em&gt;*” de la instancia de Formik.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Formik component:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Es un componente que encierra todo el formulario en un contexto en lugar de usar el hook &lt;strong&gt;useFormik.&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Para utilizarlo, se coloca como etiqueta HTML la palabra Formik, la cual será una etiqueta de apertura y cierre “&lt;strong&gt;&lt;/strong&gt;” que será un componente que contendrá la etiqueta de formulario “&lt;strong&gt;&lt;/strong&gt;”.&lt;/li&gt;
&lt;li&gt;Dicha etiqueta de apertura “&lt;strong&gt;&lt;/strong&gt;” recibirá como props, los valores de la misma manera que se colocaban en el hook “&lt;strong&gt;useFormik&lt;/strong&gt;”, los cuales deben de ser asignados dentro de llaves por ser código de JS.&lt;/li&gt;
&lt;li&gt;Lo que contienen las etiquetas “&lt;strong&gt;&lt;/strong&gt;”:

&lt;ul&gt;
&lt;li&gt;Una función que retorna un componente JSX de formulario, para ello, dentro de llaves “*&lt;strong&gt;&lt;em&gt;{}&lt;/em&gt;&lt;/strong&gt;&lt;em&gt;” por ser código de JS, se coloca una función de flecha, la cual va a recibir como argumento un objeto “&lt;/em&gt;************&lt;strong&gt;&lt;em&gt;formData&lt;/em&gt;&lt;/strong&gt;**********&lt;strong&gt;&lt;em&gt;” que posee las misma propiedades y métodos que los que retorna la función hook “&lt;/em&gt;&lt;/strong&gt;************&lt;strong&gt;&lt;em&gt;useFormik&lt;/em&gt;&lt;/strong&gt;************&lt;em&gt;**” que retornan dichas etiquetas “&lt;/em&gt;&lt;em&gt;&lt;/em&gt;*” y el cual será utilizado dentro del formulario para acceder a los valores enviados como props a dichas etiquetas.&lt;/li&gt;
&lt;li&gt;Si no se va a utiliza el objeto “&lt;strong&gt;formData&lt;/strong&gt;”, no es necesario ejecutar dicha función dentro del componente “&lt;strong&gt;&lt;/strong&gt;”, sino que solo se coloca el componente formulario correspondiente.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Form component:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Devuelve una etiqueta &lt;strong&gt;form&lt;/strong&gt; con todos los props de Formik (handleSubmit, handleReset).&lt;/li&gt;
&lt;li&gt;Para delimitar y agrupar elementos del formulario. Actúa como un contenedor que engloba todos los campos de entrada, etiquetas y otros elementos relacionados con el formulario.&lt;/li&gt;
&lt;li&gt;Para utilizarlo, se debe importar “*****&lt;strong&gt;&lt;em&gt;Form&lt;/em&gt;&lt;/strong&gt;**&lt;strong&gt;&lt;em&gt;” desde la librería “&lt;/em&gt;&lt;/strong&gt;******&lt;strong&gt;&lt;em&gt;formik&lt;/em&gt;&lt;/strong&gt;*********”.&lt;/li&gt;
&lt;li&gt;En vez de utilizar la etiqueta “&lt;strong&gt;&lt;/strong&gt;” de HTML, se utiliza como etiqueta “&lt;strong&gt;&lt;/strong&gt;”, la cual no necesita recibir la propiedad que maneja el evento “&lt;strong&gt;onSubmit&lt;/strong&gt;” ya que la contiene implícitamente mediante la propiedad “&lt;strong&gt;onSubmit&lt;/strong&gt;” enviada al componente “&lt;strong&gt;&lt;/strong&gt;”.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Field component:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Devuelve una etiqueta &lt;strong&gt;input&lt;/strong&gt; con todos los props de la función “getFieldProps()”,  permitiendo NO colocar: &lt;strong&gt;{...formData.getFieldProps("nameControl")}&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Para utilizarlo, se debe importar “*****&lt;strong&gt;&lt;em&gt;Field&lt;/em&gt;&lt;/strong&gt;**&lt;strong&gt;&lt;em&gt;” desde la librería “&lt;/em&gt;&lt;/strong&gt;******&lt;strong&gt;&lt;em&gt;formik&lt;/em&gt;&lt;/strong&gt;*********”.&lt;/li&gt;
&lt;li&gt;En vez de utilizar una etiqueta “&lt;strong&gt;&lt;/strong&gt;”, se utiliza como etiqueta “&lt;strong&gt;&lt;/strong&gt;” la cual va a recibir las mismas propiedades que dicho input, siendo obligatoria la propiedad “*****&lt;strong&gt;&lt;em&gt;name&lt;/em&gt;&lt;/strong&gt;**&lt;em&gt;**” la cual debe tener como valor asignado, el mismo valor declarado en la propiedad “&lt;/em&gt;&lt;em&gt;initialValues&lt;/em&gt;&lt;em&gt;” del componente “&lt;/em&gt;&lt;em&gt;&lt;/em&gt;*”.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ErrorMessage component:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Agrega la condición cuando &lt;strong&gt;input&lt;/strong&gt; es usado (touched) y si existe el error para mostrar un mensaje, desde el objeto “*********&lt;strong&gt;&lt;em&gt;errors&lt;/em&gt;&lt;/strong&gt;******&lt;em&gt;**” el cual es accedido automáticamente mediante la propiedad "&lt;/em&gt;&lt;em&gt;validate&lt;/em&gt;&lt;em&gt;" del componente “&lt;/em&gt;&lt;em&gt;&lt;/em&gt;*”.&lt;/li&gt;
&lt;li&gt;Para utilizarlo, se coloca como etiqueta “&lt;strong&gt;&lt;/strong&gt;”, la cual en la propiedad “*****&lt;strong&gt;&lt;em&gt;name&lt;/em&gt;&lt;/strong&gt;**&lt;em&gt;**” debe tener como valor asignado, el mismo valor declarado en la propiedad “&lt;/em&gt;&lt;em&gt;initialValues&lt;/em&gt;&lt;em&gt;” del componente “&lt;/em&gt;&lt;em&gt;&lt;/em&gt;*” para ejecutar sus validaciones.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;setFieldValue() function:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Permite actualizar los values del estado del formulario.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;FieldArray component:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Ayuda a manejar arrays dentro de los values del form.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;useFormikContext component:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Custom hook que te permite acceder a los valor del contexto del componente Formik.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Yup:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Librería open-source.&lt;/li&gt;
&lt;li&gt;Permite construir esquemas(objetos) de validación, en los cuales se declaran lo nombres que hacen referencia a los controles del formulario para así declarar exactamente que validaciones debe de cumplir, mediante el uso de funciones integradas para dichas validaciones.&lt;/li&gt;
&lt;li&gt;Integración con Formik (recomendada).&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Para implementarlo, mediante la terminal se debe posicionar en la ruta del proyecto e instalar la librería mediante ***&lt;strong&gt;&lt;em&gt;npm&lt;/em&gt;&lt;/strong&gt;***, con el comando:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;**npm install yup**
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Para utilizarlo, se debe importar todo “**&lt;strong&gt;&lt;em&gt;”, de “&lt;/em&gt;&lt;/strong&gt;&lt;em&gt;as&lt;/em&gt;&lt;strong&gt;&lt;em&gt;”, “&lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;&lt;em&gt;Yup&lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;&lt;em&gt;”, desde la librería “&lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;&lt;em&gt;yup&lt;/em&gt;&lt;/strong&gt;***”.&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;Yup&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;yup&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Se crear el esquema de validación, el cual es una constante declarada arbitrariamente, con valor asignado de, dede la clase “***&lt;strong&gt;&lt;em&gt;Yup&lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;&lt;em&gt;”, ejecutar su método de objeto “&lt;/em&gt;&lt;/strong&gt;******&lt;strong&gt;&lt;em&gt;object()&lt;/em&gt;&lt;/strong&gt;******&lt;strong&gt;&lt;em&gt;” y aplicar el método “&lt;/em&gt;&lt;/strong&gt;********&lt;strong&gt;&lt;em&gt;shape()&lt;/em&gt;&lt;/strong&gt;***********” para darle forma/formato:&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;El formato del esquema de validación mediante el método “***********&lt;strong&gt;&lt;em&gt;shape()&lt;/em&gt;&lt;/strong&gt;***********” se define de la siguiente manera:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Se coloca como propiedad del objeto, el nombre que hace referencia al control del formulario, el cual debe declarase igual que en la propiedad “&lt;strong&gt;initialValues&lt;/strong&gt;” del componente “&lt;strong&gt;&lt;/strong&gt;” para enlazarlos.&lt;/li&gt;
&lt;li&gt;Como valor de dicho control del formulario, se asigna, desde la clase “***&lt;strong&gt;&lt;em&gt;Yup&lt;/em&gt;&lt;/strong&gt;&lt;em&gt;**”, la validación que debe de cumplir, como: “&lt;/em&gt;&lt;em&gt;Yup.string()&lt;/em&gt;*”, para validar que sea una cadena de texto.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Para añadir más validaciones, se encadenan las funciones para validar lo demás que se requiere, siendo: “&lt;strong&gt;Yup.string().required().email()&lt;/strong&gt;”, para validar que sea una cadena de texto, que es una campo requerido, y que debe ser un correo electrónico.&lt;/p&gt;

&lt;p&gt;Dentro de cada función de validación, se puede recibir como argumento, una cadena de texto para definir los mensajes que se mostrarán si no se cumplen las validaciones.&lt;/p&gt;

&lt;p&gt;Así para cada control/campo del formulario.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Para utilizar el formato del esquema de validación, se coloca en el componente “&lt;strong&gt;&lt;/strong&gt;” como la propiedad “**************************&lt;strong&gt;&lt;em&gt;&lt;strong&gt;&lt;em&gt;validationSchema&lt;/em&gt;&lt;/strong&gt;&lt;/em&gt;&lt;/strong&gt;**************************” a la cual se le asigna como valor, dentro de llaves por ser código de JS, el nombre de la constante  donde se definió el formato del esquema de validación.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  EJEMPLO:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Formik&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Form&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Field&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;ErrorMessage&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="s2"&gt;formik&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Se importan, el componente que encierra todo el formulario en un contexto, el componente para crear fomrularios de Formik, el componente para controles/campos del formulario, y el componente para mostrar errores de validaciones, desde la libreía de "formik".&lt;/span&gt;
&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;Yup&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;yup&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Se importa "todo" de Yup, desde la librería "yup" para manejar las validaciones de los campos dek formulario.&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&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="c1"&gt;//Se exporta como valor por defecto, la declaración de función que será un componente, la cual ejecuta el siguiente bloque.&lt;/span&gt;

    &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;handleSubmit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;values&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="nx"&gt;resetForm&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="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de función para manejar el envío de los datos del formulario, la cual recibe como primer argumento el objeto "values" que contiene los valores actuales de todos los campos del formulario, como segundo argumento se destructura desde el objeto “formikBag” la funicón para resetear el formualrio, y que ejecuta el siguiente bloque.&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;values&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;//A la consola del navegador, se le aplica el métdo para imprir en la misma, los valores del dicho objeto "values" enviado como argumento.&lt;/span&gt;
        &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;resetForm&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Se ejecuta la función para resetear el formulario.&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;handleDisabled&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;formData&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de función para manejar el comportamiento de habilitar el botón para enviar los datos del formulario, la cual ejecuta el siguiente bloque.&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;keys&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;formData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;errors&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="c1"&gt;//Se retorna el resultado de dos condiciones siendo, desde la clase "Object" ejecutar su método "keys" para obtener un arreglo de las propiedades (claves) de un objeto, el cual recibe como argumento, de la instacia de Forimik "formData", acceder al objeto de errores de validaciones, la cual es accedida automáticamente mediante la propiedad "validate" de la instancia de Formirk que ejecuta la función asociada "handleValidate" que retorna el objeto "errors", y obtener su longitud que representa la cantidad de errores de validación presentes para validar si es mayor que 0 lo que significa que hay errores, O, la siguiente condición.&lt;/span&gt;
            &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;values&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;formData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;values&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;every&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;//Negar(invertir) el resultado de, desde la clase "Object" ejecutar su método "values" para obtener un arreglo de los valores de las propiedades de un objeto, el cual recibe como argumento, de la instacia de Forimik "formData", acceder a sus "valores" los cuales son los que se encuentran en la propiedad "initialValues" de la instancia de Formik, y aplicar el método "every" que verifica si todos los elementos de un arreglo cumplen con cierta condición, siendo cada uno de los valores dentro del objeto "initialValues", el cual recibe como argumento una función flecha callback, la cual ejecuta, por cada valor dentro del arreglo obtenido del objeto "formData.values", retornar el mismo valor, así para verificar si todos los valores en el objeto "formData.values" son verdaderos, siendo que si todos los valores son verdaderos, la función "every" devolverá "true", si al menos un valor es falso, la función "every" devolverá "false", al agregar la negación "!" al principio, se invierte el resultado, por lo que la expresión completa evalúa si al menos un valor es "falso".&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;FormSchema&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Yup&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;object&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;shape&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de constante con valor asignado de, desde "Yup", ejecutar su método para crear un objeto, al cual se le aplica el método, para darle una forma/formato, el cual recibe como argumento un obejto, el cual será el objeto de validaciones de los controles/campos del formulario.&lt;/span&gt;
        &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="na"&gt;termsAccepted&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Yup&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;boolean&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;oneOf&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Is required&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;required&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad del objeto, el cual será el validador del campo "termsAccepted", el cual está definido de la misma manera que en la propiedad "initialValues**"** del componente “&amp;lt;Formik&amp;gt;”, con valor asignado de, desde "Yup", validar que se reciba un valor booleano, y con el método "oneOf" que asegura que éste campo tenga exactamente el valor "true", si no es así, se muestra el mensaje de error "Is required", esto garantiza que el campo esté seleccionado para que el formulario sea válido.&lt;/span&gt;
        &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="na"&gt;email&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Yup&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;required&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Is required&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;email&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Is not a valid email&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad del objeto, el cual será el validador del campo "email", el cual está definido de la misma manera que en la propiedad "initialValues**"** del componente “&amp;lt;Formik&amp;gt;”, con valor asignado de, desde "Yup", validar que se reciba un valor de cadena de texto, que sea requerido mostrando la cadena de texto enviada como argumento al momento que no se cumpla dicha validación, y se valida que el valor del campo sea una dirección de correo electrónico válida y muestra el mensaje de error "Is not a valid email" si no lo es.&lt;/span&gt;
        &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="na"&gt;firstName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Yup&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;required&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Is required&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;min&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Minimum two characters&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad del objeto, el cual será el validador del campo "firstName", el cual está definido de la misma manera que en la propiedad "initialValues**"** del componente “&amp;lt;Formik&amp;gt;”, con valor asignado de, desde "Yup", validar que se reciba un valor de cadena de texto, que sea requerido mostrando la cadena de texto enviada como argumento al momento que no se cumpla dicha validación, y se valida que el valor del campo tener una longitud mínima de 2 caracteres, si no se cumplen estas condiciones, se mostrará el mensaje de error "Minimum two characters".&lt;/span&gt;
        &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="na"&gt;lastName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Yup&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;string&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;required&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Is required&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;min&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Minimum two characters&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad del objeto, el cual será el validador del campo "lastName", el cual está definido de la misma manera que en la propiedad "initialValues**"** del componente “&amp;lt;Formik&amp;gt;”, con valor asignado de, desde "Yup", validar que se reciba un valor de cadena de texto, que sea requerido mostrando la cadena de texto enviada como argumento al momento que no se cumpla dicha validación, y se valida que el valor del campo tener una longitud mínima de 2 caracteres, si no se cumplen estas condiciones, se mostrará el mensaje de error "Minimum two characters".&lt;/span&gt;
    &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;});&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="c1"&gt;//Se retorna una estructura de JSX, el cual será la sección principal del componente a ser renderizado, siendo colocado entre paréntesis.&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta contenedora de bloque.
            &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;Dynamic Form&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; //Etiqueta de título principal, contiene texto.
            **&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Formik&lt;/span&gt;&lt;span class="err"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Componente que encierra todo el formulario en un contexto, el cual recibe las siguientes props.&lt;/span&gt;
                &lt;span class="err"&gt;**&lt;/span&gt;&lt;span class="na"&gt;initialValues&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad para definir los valores iniciales de los campos del formulario, con valor asignado dentro de paréntesis por ser código de JS, de un objeto con las siguientes propiedades.&lt;/span&gt;
                    &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="na"&gt;termsAccepted&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="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad del objeto, que será el valor inicial para el control de "termsAccepted", con valor asignado de, el valor booleano false, para que el control no empiece activado.&lt;/span&gt;
                    &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="na"&gt;email&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="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad del objeto, que será el valor inicial para el control de "email", con valor asignado de, una cadena vacía.&lt;/span&gt;
                    &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="na"&gt;firstName&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="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad del objeto, que será el valor inicial para el control de "firstName", con valor asignado de, una cadena vacía.&lt;/span&gt;
                    &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="na"&gt;lastName&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="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad del objeto, que será el valor inicial para el control de "lastName", con valor asignado de, una cadena vacía.&lt;/span&gt;
                &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
                &lt;span class="na"&gt;onSubmit&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;handleSubmit&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="err"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad del objeto, que será una función que se ejecutará cuando el formulario sea enviado, con valor asignado dentro de llaves por ser código de JS, de la función declarada para manejar el envío de los datos del formulario.&lt;/span&gt;
                &lt;span class="err"&gt;**&lt;/span&gt;&lt;span class="na"&gt;validationSchema&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;FormSchema&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;&amp;gt;&lt;/span&gt;** //Propiedad del objeto, que manejará la validaciones, siendo el esquema de validaciones creado con Yup, con valor asignado dentro de llaves por ser código de JS, de dicha constante la cual es el esquema de validaciones definido para validar los campos del formulario.

                **&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;formData&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="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//El componente "&amp;lt;Formik&amp;gt;" contiene, dentro de llaves por ser código de JS, una función de flecha de renderizado como hijo, la cual recibe como argumento el objeto “formData” que retorna dicho componenete “&amp;lt;Formik&amp;gt;” y el cual será utilizado dentro del formulario para acceder a los valores enviados como props a dicho componente "&amp;lt;Formik&amp;gt;", y que retorna una estructura de JSX.&lt;/span&gt;
                    &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Form&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;** //Componente con todos las props del componenete “&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Formik&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;”, para delimitar y agrupar elementos del formulario. Actúa como un contenedor que engloba todos los campos de entrada, etiquetas y otros elementos relacionados con el formulario.
                        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta contenedora de bloque.
                            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;label&lt;/span&gt; &lt;span class="na"&gt;htmlFor&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"termsAccepted"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Accept Terms&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;label&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta para etiquetar elementos de interfaz de usuario, posee el atributo "for" para enlazarla con el elemento correspondiente con valor de una cadena de texto la cual es la misma que el identificador del elemento a ser enlazado, y contiene texto. 
                            **&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Field&lt;/span&gt;&lt;span class="err"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Componente de campo/control dentro de formulario, el cual contiene las sisguientes props.&lt;/span&gt;
                                &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"checkbox"&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad de "tipo", con valor para ser de "caja de selección".&lt;/span&gt;
                                &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"termsAccepted"&lt;/span&gt; &lt;span class="c1"&gt;//Atributo de "nombre", con valor de dicha cadena de texto la cual es la misma declarada en la propiedad "initialValues" del componente &amp;lt;Formik&amp;gt;, para enlazar sus valores.&lt;/span&gt;
                                &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"termsAccepted"&lt;/span&gt; &lt;span class="c1"&gt;//Selector identificador, con valor aignado de una cadena de texto, la cual es la misma que su "label" a enlazar.&lt;/span&gt;
                                &lt;span class="na"&gt;checked&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;formData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;values&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;termsAccepted&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad de "comprobado/seleccionado", con valor dentro de llaves por ser código de JS, desde el objeto "formData", acceder a sus "valores" los cuales son los que se encuentran en la propiedad "initialValues" del componente &amp;lt;Formik&amp;gt;, accediendo a la propiedad "termsAccepted" de dicha propiedad "initialValues" para obetener su valor y controlar su comportamiento dependiendo de dicho valor.&lt;/span&gt;
                            &lt;span class="err"&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;ErrorMessage&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"termsAccepted"&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;** //Componente de mensaje de error, siendo que agrega la condición cuando el control/campo es usado (touched) y si existe el error para mostrar un mensaje, desde el objeto “errors” el cual es accedido automáticamente mediante la propiedad "validate" del componente “&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Formik&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;”, posee la propiedad de "nombre" con el mismo valor declarado en la propiedad “initialValues” del componente “&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Formik&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;” para ejecutar sus validaciones.
                        &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&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;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta contenedora de bloque.
                            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;label&lt;/span&gt; &lt;span class="na"&gt;htmlFor&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Email&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;label&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta para etiquetar elementos de interfaz de usuario, posee el atributo "for" para enlazarla con el elemento correspondiente con valor de una cadena de texto la cual es la misma que el identificador del elemento a ser enlazado, y contiene texto. 
                            **&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Field&lt;/span&gt;&lt;span class="err"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Componente de campo/control dentro de formulario, el cual contiene las sisguientes props.&lt;/span&gt;
                                &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad de "tipo", con valor para ser de "correo electrónico".&lt;/span&gt;
                                &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt; &lt;span class="c1"&gt;//Atributo de "nombre", con valor de dicha cadena de texto la cual es la misma declarada en la propiedad "initialValues" del componente &amp;lt;Formik&amp;gt;, para enlazar sus valores.&lt;/span&gt;
                                &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt; &lt;span class="c1"&gt;//Selector identificador, con valor aignado de una cadena de texto, la cual es la misma que su "label" a enlazar.                                &lt;/span&gt;
                                &lt;span class="na"&gt;placeholder&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"sample@mail.com"&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad de texto demostrativo, con valor de una cadena de texto a ser mostrada.&lt;/span&gt;
                            &lt;span class="err"&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;ErrorMessage&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;** //Componente de mensaje de error, siendo que agrega la condición cuando el control/campo es usado (touched) y si existe el error para mostrar un mensaje, desde el objeto “errors” el cual es accedido automáticamente mediante la propiedad "validate" del componente “&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Formik&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;”, posee la propiedad de "nombre" con el mismo valor declarado en la propiedad “initialValues” del componente “&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Formik&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;” para ejecutar sus validaciones.
                        &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;

                        &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;formData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;errors&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;email&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="c1"&gt;//Dentro de llaves por se código de JS, se ejecutan dos condiciones que deben ser cumplidas al mismo tiempo, siendo la primera, negar/invertir el valor obtenido de, desde la instancia de Formik "formData", acceder al objeto de errores de validaciones, la cual es accedida automáticamente mediante la propiedad "validate" de la instancia de Formirk que ejecuta la función asociada "handleValidate" que retorna el objeto "errors", del cual se accede a su propiedad "email" ejecutando las validaciones correspondientes mediante las condicionales, siendo que si alguna de ellas se cumple, será invertido el valor "true" por "false" para que no se cumpla la condición, y al mismo tiempo mediante el operador "and/&amp;amp;&amp;amp;".&lt;/span&gt;
                        &lt;span class="nx"&gt;formData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;values&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;termsAccepted&lt;/span&gt; &lt;span class="o"&gt;===&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="c1"&gt;//Desde la instancia de Formik "formData", acceder a sus "valores" los cuales son los que se encuentran en la propiedad "initialValues" de la instancia de Formik, accediendo a la propiedad "termsAccepted" de dicha propiedad "initialValues" para obetener su valor, y validar si es estrictamente igual que, el valor booleano "true", éstas dos condiciones se deden de cumplir para, retornar una estructura de JSX, siendo colocado entre paréntesis.&lt;/span&gt;
                            &lt;span class="p"&gt;&amp;lt;&amp;gt;&lt;/span&gt; //Fragmento de React para contener el componente sin ser renderizado dentro de otro elemento.
                                &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta contenedora de bloque.
                                    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;label&lt;/span&gt; &lt;span class="na"&gt;htmlFor&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"firstName"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;First Name&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;label&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta para etiquetar elementos de interfaz de usuario, posee el atributo "for" para enlazarla con el elemento correspondiente con valor de una cadena de texto la cual es la misma que el identificador del elemento a ser enlazado, y contiene texto.
                                    **&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Field&lt;/span&gt;&lt;span class="err"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Componente de campo/control dentro de formulario, el cual contiene las sisguientes props.&lt;/span&gt;
                                        &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad de "tipo", con valor para ser de "texto".&lt;/span&gt;
                                        &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"firstName"&lt;/span&gt; &lt;span class="c1"&gt;//Atributo de "nombre", con valor de dicha cadena de texto la cual es la misma declarada en la propiedad "initialValues" del componente &amp;lt;Formik&amp;gt;, para enlazar sus valores.&lt;/span&gt;
                                        &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"firstName"&lt;/span&gt; &lt;span class="c1"&gt;//Selector identificador, con valor aignado de una cadena de texto, la cual es la misma que su "label" a enlazar.&lt;/span&gt;
                                    &lt;span class="err"&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;ErrorMessage&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"firstName"&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;** //Componente de mensaje de error, siendo que agrega la condición cuando el control/campo es usado (touched) y si existe el error para mostrar un mensaje, desde el objeto “errors” el cual es accedido automáticamente mediante la propiedad "validate" del componente “&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Formik&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;”, posee la propiedad de "nombre" con el mismo valor declarado en la propiedad “initialValues” del componente “&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Formik&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;” para ejecutar sus validaciones.
                                &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&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;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta contenedora de bloque.
                                    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;label&lt;/span&gt; &lt;span class="na"&gt;htmlFor&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"lastName"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Last Name&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;label&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta para etiquetar elementos de interfaz de usuario, posee el atributo "for" para enlazarla con el elemento correspondiente con valor de una cadena de texto la cual es la misma que el identificador del elemento a ser enlazado, y contiene texto.
                                    **&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Field&lt;/span&gt;&lt;span class="err"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Componente de campo/control dentro de formulario, el cual contiene las sisguientes props.&lt;/span&gt;
                                        &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad de "tipo", con valor para ser de "texto".&lt;/span&gt;
                                        &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"lastName"&lt;/span&gt; &lt;span class="c1"&gt;//Atributo de "nombre", con valor de dicha cadena de texto la cual es la misma declarada en la propiedad "initialValues" del componente &amp;lt;Formik&amp;gt;, para enlazar sus valores.&lt;/span&gt;
                                        &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"lastName"&lt;/span&gt; &lt;span class="c1"&gt;//Selector identificador, con valor aignado de una cadena de texto, la cual es la misma que su "label" a enlazar.&lt;/span&gt;
                                    &lt;span class="err"&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;ErrorMessage&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"lastName"&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;** //Componente de mensaje de error, siendo que agrega la condición cuando el control/campo es usado (touched) y si existe el error para mostrar un mensaje, desde el objeto “errors” el cual es accedido automáticamente mediante la propiedad "validate" del componente “&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Formik&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;”, posee la propiedad de "nombre" con el mismo valor declarado en la propiedad “initialValues” del componente “&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Formik&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;” para ejecutar sus validaciones.
                                &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
                            &lt;span class="p"&gt;&amp;lt;/&amp;gt;&lt;/span&gt;
                        ) : null} //Si no se cumple la condición ternaria, se ejecuta un valor nulo para no mostrar nada, lo que significa que no se han aceptado los terminos y no se ha escrito un correo electrónico.

                        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="c1"&gt;//Etiqueta de botón, que se encargará de mandar los datos del formulario, contiene los siguiente atributos y propiedades.&lt;/span&gt;
                            &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"submit"&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad de tipo, con valor para ser de "entregar/mandar".&lt;/span&gt;
                            &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"submit"&lt;/span&gt; &lt;span class="c1"&gt;//Atributo de "nombre", con valor de dicha cadena de texto la cual serán mandada con los datos del formulario.&lt;/span&gt;
                            &lt;span class="na"&gt;disabled&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;handleDisabled&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;formData&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Propiedad de "desactivado", con valor asignado dentro de llaves por ser código de JS, de llamar a ejecutar dicha función para habilitar el botón dependiendo del buen llenado de los campos del formulario.
                            Subscribe //Contiene texto a ser mostrado.
                        &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;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&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="nc"&gt;Formik&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;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    );
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>react</category>
      <category>form</category>
      <category>webdev</category>
      <category>frontend</category>
    </item>
    <item>
      <title>CONSUMIR SERVICIOS WEB</title>
      <dc:creator>Rodrigo Grau</dc:creator>
      <pubDate>Tue, 15 Aug 2023 01:07:35 +0000</pubDate>
      <link>https://dev.to/rogab0t/consumir-servicios-web-3cec</link>
      <guid>https://dev.to/rogab0t/consumir-servicios-web-3cec</guid>
      <description>&lt;ul&gt;
&lt;li&gt;[¿Cómo funciona la WEB?]&lt;/li&gt;
&lt;li&gt;[HTTP: HyperText Transfer Protocol]&lt;/li&gt;
&lt;li&gt;[fetch():]&lt;/li&gt;
&lt;li&gt;[AXIOS:]&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  ¿Cómo funciona la WEB?
&lt;/h1&gt;

&lt;p&gt;Se entiende que se tiene un &lt;strong&gt;cliente web&lt;/strong&gt; lo cual es todo lo que se ve dentro de un navegador, siendo organizado para poder ser mostrado a ls usuarios, y se tiene un &lt;strong&gt;servidor web&lt;/strong&gt; es donde se almacena toda esa información que se ven en un navegador.&lt;/p&gt;

&lt;p&gt;Los usuarios solo tienen interacción con el cliente web, y los desarrolladores tienen más interacción con el servidor web y el control del cliente web mediante el servidor web, para así mostrar dicha información de servidor web a los usuarios de una manea optima.&lt;/p&gt;

&lt;h1&gt;
  
  
  HTTP: HyperText Transfer Protocol
&lt;/h1&gt;

&lt;p&gt;Para que se puede tener una buena comunicación y que sea segura, se inventaron los protocolos. Los protocolos serán toda la comunicación entre el &lt;strong&gt;servidor web&lt;/strong&gt; y los &lt;strong&gt;clientes web&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Se tienen distintos tipos de protocolos y en distintos niveles. Siendo los de aplicaciones web:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;FTP&lt;/strong&gt;:&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SMTP&lt;/strong&gt;:&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;HTTP&lt;/strong&gt;: Protocolo de Transferencia de HyperTexto:

&lt;ul&gt;
&lt;li&gt;Transferencia / intercambio de datos en la web a través de documentos&lt;/li&gt;
&lt;li&gt;Protocolo de estructura cliente - servidor&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cliente&lt;/strong&gt;: Request / Petición&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Servidor&lt;/strong&gt;: Response / Respuesta&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  REQUEST / Petición:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Método de la petición/request: ***&lt;strong&gt;&lt;em&gt;GET&lt;/em&gt;&lt;/strong&gt;***&lt;/li&gt;
&lt;li&gt;La ruta: *******&lt;strong&gt;&lt;em&gt;/post&lt;/em&gt;&lt;/strong&gt;*******&lt;/li&gt;
&lt;li&gt;Tipo/número de protocolo que se esté utilizando: &lt;strong&gt;HTTP/2&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Cabeceras/headers: Aportan información adicional a parte de la petición:

&lt;ul&gt;
&lt;li&gt;Que &lt;strong&gt;host/anfitrión&lt;/strong&gt; provee los servicios.&lt;/li&gt;
&lt;li&gt;Que &lt;strong&gt;User-Agent/Navegador&lt;/strong&gt; se está utilizando.&lt;/li&gt;
&lt;li&gt;Que tipos de archivos se van &lt;strong&gt;aceptar&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Etc…&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Las peticiones también pueden contener un cuerpo/body y mandar información a través de ellos, dependiendo de método que se utilice:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GET&lt;/strong&gt;: No se debe manar información a través del body, sino a través del ***************&lt;strong&gt;&lt;em&gt;path/ruta&lt;/em&gt;&lt;/strong&gt;***************.&lt;/li&gt;
&lt;li&gt;Cuando se quieren crear nuevos recursos o actualizar algunos ya existentes y se necesita enviar información exactamente a través de los atributos de este nuevo recurso o de la actualización, se debe hacer a través del cuerpo/body.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  RESPONSE / Respuesta:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Tipo/número de protocolo que se esté utilizando: &lt;strong&gt;HTTP/2&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Status Code/Código de estado, cada uno con un significado: ***&lt;strong&gt;&lt;em&gt;200&lt;/em&gt;&lt;/strong&gt;***&lt;/li&gt;
&lt;li&gt;Status Message/Mensaje de estado: *&lt;strong&gt;&lt;em&gt;OK&lt;/em&gt;&lt;/strong&gt;*&lt;/li&gt;
&lt;li&gt;Cabeceras/headers: Aportan información adicional a parte de la petición y algunas serán devueltas dependiente del tipo de petición:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Fecha&lt;/strong&gt; de la respuesta.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tipo de contenido&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Servidor.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Etc…&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Body&lt;/strong&gt;/Cuerpo: Contiene toda la información necesaria de la petición web.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  fetch():
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Método para iniciar el proceso de hacer una búsqueda o petición de un recurso en la Web.

&lt;ul&gt;
&lt;li&gt;Cada ves que se está entrando a una página web, se está haciendo una búsqueda de un recurso:

&lt;ul&gt;
&lt;li&gt;Un recurso son las rutas que se pueden tener en una página, los cuales son accedidos mediante dicha ruta.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Retorna una promesa (objeto “response” que produce un valor en el futuro).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;SINTAXIS&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Se llama a ejecutar la función &lt;strong&gt;fetch(resource)&lt;/strong&gt;, la cual recibe como argumento el nombre del recurso a obtener siendo éste obtenido mediante toda la &lt;strong&gt;URL/path&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;fetch(resource, options)&lt;/strong&gt;, también se pueden colocar como segundo argumento, *************&lt;strong&gt;&lt;em&gt;opciones&lt;/em&gt;&lt;/strong&gt;************* adicionales, ya que por defecto &lt;strong&gt;fetch&lt;/strong&gt; va a ejecutar un método *********&lt;strong&gt;&lt;em&gt;GET&lt;/em&gt;&lt;/strong&gt;*********, y para utilizar un método distinto, éste debe ser declarado como segundo argumento y también se pueden recibir las siguientes opciones:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;OPTIONS&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Method, headers, body, mode, credentials.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  GET: Get all posts / obtiene todos los recursos:
&lt;/h3&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="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="nx"&gt;useEffect&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="s2"&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;//Se importan las funciones hooks, para manejar los efectos secundarios de un componente, y para manejar el estado de un componente, desde, la biblioteca de react&lt;/span&gt;

&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;BASE_URL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://jsonplaceholder.typicode.com&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de constante que será la URL base para hacer peticiones web, con valor asignado de una cadena de texto que es la URL a consultar&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&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="c1"&gt;//Se exporta como valor por defecto, la declaración de función que será un componente, la cual ejecuta el siguinte bloque&lt;/span&gt;
    &lt;span class="kd"&gt;const&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;setState&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;loading&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de constante la cual será un estado del componente, en la cual se utiliza la sintaxis de destructuración de arreglos, siendo el primer valor, el valor actual del estado el cual empieza siendo el valor por defecto enviado a "useState", y como segundo valor la función que actualizará el estado, dicha constante tiene valor asignado de, llamar a ejecutar la función importada para el estado del componente, la cual recibe como argumento para el valor por defecto del componente, el valor de cadenas de texto "loading", indicando que el componente está en la fase de carga inicial&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;posts&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setPosts&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;([]);&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de constante la cual será un estado del componente, en la cual se utiliza la sintaxis de destructuración de arreglos, siendo el primer valor, el valor actual del estado el cual empieza siendo el valor por defecto enviado a "useState", y como segundo valor la función que actualizará el estado, dicha constante tiene valor asignado de, llamar a ejecutar la función importada para el estado del componente, la cual recibe como argumento para el valor por defecto del componente, el valor de un arrego vacío&lt;/span&gt;

    &lt;span class="nx"&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="c1"&gt;//Se llama a ejecutar la función hook para manejar efectos secundarios en componentes, la cual recibe como primer argumento, una función flecha callback, la cual ejecuta el siguiente bloque&lt;/span&gt;
        &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;loadPosts&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de función asíncrona, la cual hará la función de obtener los recursos desde una petición web a un servidor, y que ejecuta el siguiente bloque&lt;/span&gt;
            &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;//Se intenta ejecutar el siguiente bloque&lt;/span&gt;
                &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;BASE_URL&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/posts&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de constante, con valor asignado de, "esperar" la respuesta, de ejcutar la función asíncrona de "peticiones web", la cual recibe como argumento, el valor de dicha constante que es la URL del sitio web, concateado con la cadena de texto "/posts" para acceder a los recursos desde dicha URL(ruta web)&lt;/span&gt;

                &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;200&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="c1"&gt;//Condicional que valida si, de la respuesta de dicha petición web asíncrona, su propiedad de "estado", es estrictamente igual que el valor numérico 200, para determinar si la petición se realizó correctamente, ejecutando el siguiente bloque si se cumple dicha condición&lt;/span&gt;
                    &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;postsResponse&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de constante con valor asignado de, esperar la respuesta de, a la respuesta de la petición web la cual es un objeto, aplicar el método "json()" para acceder a su información&lt;/span&gt;
                    &lt;span class="nx"&gt;setPosts&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;postsResponse&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;//Se llama a ejecutar la función de actualización de uno de los estados del componente, la cual recibe como argumento, la respuesta de la petición web con su contenido accesible el cual es un arreglo que contiene más objetos, siendo este el nuevo valor actual del estado&lt;/span&gt;
                    &lt;span class="nx"&gt;setState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;success&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;//Se llama a ejecutar la función de actualización de uno de los estados del componente, la cual recibe como argumento, dicha cadena de texto, siendo este el nuevo valor actual del estado&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="c1"&gt;//Si no se cumple la condición anterior, se ejecuta el siguiente bloque&lt;/span&gt;
                    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;error:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;//A la consola del navegador, se le aplica el método de mostrar errores en la misma, el cual recibe como argumento, la cadena de texto "error", y de la respuesta de dicha petición web asíncrona, su propiedad de "estado"&lt;/span&gt;
                    &lt;span class="nx"&gt;setState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;error&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;//Se llama a ejecutar la función de actualización de uno de los estados del componente, la cual recibe como argumento, dicha cadena de texto, siendo este el nuevo valor actual del estado&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;error&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 no se pudo ejecutar el el bloque anterior de "try", se captura el error para manejarlo, siendo que se recibe como argumento el error, y ejecutando el siguiente bloque&lt;/span&gt;
                &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;//A la consola del navegador, se le aplica el método de mostrar errores en la misma, el cual recibe como argumento, la cadena de texto "error"&lt;/span&gt;
                &lt;span class="nx"&gt;setState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;error&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;//Se llama a ejecutar la función de actualización de uno de los estados del componente, la cual recibe como argumento, dicha cadena de texto, siendo este el nuevo valor actual del estado&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="nx"&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="c1"&gt;//Se ejecuta la función que establece un tiempo de espera para ejecutar una funcionalidad, la cual recibe como primer argumento  una función de flecha callback, la cual ejecuta el siguiente bloque&lt;/span&gt;
            &lt;span class="nx"&gt;loadPosts&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;//Se llama a ejecutar dicha función asíncrona para obtener los recursos desde una petición web a un servidor, y así cargar los datos de los posts cuando el componente se monta por primera vez&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="c1"&gt;//Como segundo argumento, se recibe el tiempo en milisegudos para ejecutar dicha función asíncrona&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;[]);&lt;/span&gt;  &lt;span class="c1"&gt;//Como segundo argumento, recibe un arreglo vacío, así ejecutando  el efecto secundario la primera y última vez que se renderice el componente, esto garantiza que el efecto solo se ejecute una vez al inicio&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;loading&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;(&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Loading...&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;);&lt;/span&gt; &lt;span class="c1"&gt;//Antes de renderizar la sección principal del componente, se verifica el valor actual del estado "state" mediante un condicional que valida si, el valor actual de uno de los estados del componente, es estrictamente igual que, la cadena de texto "loading", retornando una estructura de JSX, el cual será el componente a ser renderizado, siendo colocado entre paréntesis, una etiqueta contenedora de bloque, la cual contiene el texto "Loading..."&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&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;(&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Error&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;);&lt;/span&gt; &lt;span class="c1"&gt;//Antes de renderizar la sección principal del componente, se verifica el valor actual del estado "state" mediante un condicional que valida si, el valor actual de uno de los estados del componente, es estrictamente igual que, la cadena de texto "error", retornando una estructura de JSX, el cual será el componente a ser renderizado, siendo colocado entre paréntesis, una etiqueta contenedora de bloque, la cual contiene el texto "Error"&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="c1"&gt;//Se retorna una estructura de JSX, el cual será la sección principal del componente a ser renderizado, siendo colocado entre paréntesis&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta contenedora de bloque
            &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;Posts&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; //Etiqueta de título principal, la cual contiene texto
            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;section&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta de sección dentro de la página
                **&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;posts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;map&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;post&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="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Dentro de llaves por ser código de JS, al valor actual(**posts, el cual es un arreglo**) de uno de los estados del componente, se le aplica el método de crear un nuevo arreglo iterando cada uno de los obejtos dentro de dicho arrelgo, ejecutando una función de flecha callback por cada uno de los elementos/objetos contenidos dentro del arreglo, la cual recibe como argumento cada uno de los elementos/objetos dentro del arreglo, ejecutando el siguiente bloque&lt;/span&gt;
                    &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;article&lt;/span&gt; &lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;post&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;** //Etiqueta de contenido independiente y autocontenido dentro de la página, la cual posee el atributo "key" para dar una identificación única a cada elemento en la lista, con valor asignado dentro de llaves por ser código de JS, del objeto dentro del arreglo "**posts**", acceder a su propiedad "id" siendo asignado su valor 
                        **&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;post&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; - &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;post&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;** //Dentro de llaves por ser código de JS, del elemento/objeto dentro del arreglo, se accede a su propiedad "id", se coloca un guión de texto, y dentro de llaves por ser código de JS, del elemento/objeto dentro del arreglo, se accede a su propiedad "title"
                    **&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;article&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="p"&gt;))&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;section&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;div&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;h3&gt;
  
  
  POST: Create a new post / crea una nueva publicación:
&lt;/h3&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="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="s2"&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;//Se importa la función hook, para manejar el estado de un componente, desde, la biblioteca de react&lt;/span&gt;

&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;BASE_URL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://jsonplaceholder.typicode.com&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de constante con valor asignado de, una cadena de texto, la cual es la URL base, a la cual se le harán peticiones web&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&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="c1"&gt;//Se exporta como valor por defecto, la declaración de función que será un componente, la cual ejecuta el siguiente bloque&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;isLoading&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setIsLoading&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;useState&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="c1"&gt;//Declaración de constante la cual será un estado del componente, en la cual se utiliza la sintaxis de destructuración de arreglos, siendo el primer valor, el valor actual del estado el cual empieza siendo el valor por defecto enviado a "useState", y como segundo valor la función que actualizará el estado, dicha constante tiene valor asignado de, llamar a ejecutar la función importada para el estado del componente, la cual recibe como argumento para el valor por defecto del componente, el valor booleano "false", indicando un estado de "cargando" al hacer la petición web, en false porque no se está cargando nada por defecto&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setTitle&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;useState&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="c1"&gt;//Declaración de constante la cual será un estado del componente, en la cual se utiliza la sintaxis de destructuración de arreglos, siendo el primer valor, el valor actual del estado el cual empieza siendo el valor por defecto enviado a "useState", y como segundo valor la función que actualizará el estado, dicha constante tiene valor asignado de, llamar a ejecutar la función importada para el estado del componente, la cual recibe como argumento para el valor por defecto del componente, el valor de cadenas de texto vacío, indicando que será el título al crear un nuevo post/publicación para ser enviada como petición al servidor web/URL, a través de un formulario&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setBody&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;useState&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="c1"&gt;//Declaración de constante la cual será un estado del componente, en la cual se utiliza la sintaxis de destructuración de arreglos, siendo el primer valor, el valor actual del estado el cual empieza siendo el valor por defecto enviado a "useState", y como segundo valor la función que actualizará el estado, dicha constante tiene valor asignado de, llamar a ejecutar la función importada para el estado del componente, la cual recibe como argumento para el valor por defecto del componente, el valor de cadenas de texto vacío, indicando que será el cuerpo al crear un nuevo post/publicación para ser enviada como petición al servidor web/URL, a través de un formulario&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;createdPosts&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setCreatedPosts&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;([]);&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de constante la cual será un estado del componente, en la cual se utiliza la sintaxis de destructuración de arreglos, siendo el primer valor, el valor actual del estado el cual empieza siendo el valor por defecto enviado a "useState", y como segundo valor la función que actualizará el estado, dicha constante tiene valor asignado de, llamar a ejecutar la función importada para el estado del componente, la cual recibe como argumento para el valor por defecto del componente, un arreglo vacío que contendrá los posts/publicacines creadas y enviadas como petición al servidor web/URL&lt;/span&gt;

    &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;createPost&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de función asíncrona, la cual hará la funcíon de hacer una petición web para crear un nuevo post/publicación para ser enviada como petición al servidor web/URL que se ejecutará cuando se envíe el formulario del componente, la cual recibe como argumento, el evento ejectado del formulario, y que ejecuta el siguiente bloque&lt;/span&gt;
        &lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;preventDefault&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;//A dicho evento ejecutado, se le aplica el método para prevenir su comportamiento por defecto, y controlar su comportamiento&lt;/span&gt;
        &lt;span class="nx"&gt;setIsLoading&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;//Se ejecuta la función de actualización del estado que controla que se está "cargando" la petición web, la cual recibe como argumento, el valor booleano "true", para indicar que se está cargando la petición web&lt;/span&gt;

        &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;//Se ejecuta el bloque de, intentar, ejeuctar el siguiente bloque&lt;/span&gt;
            &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;newPost&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de constante con valor asignado de un objeto, el cual será envíado en la petición web con la infomación del formulario, el cual contiene las siguiente propiedades&lt;/span&gt;
                &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad del objeto con valor, del valor actual del estado "title" del componente&lt;/span&gt;
                &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad del objeto con valor, del valor actual del estado "body" del componente&lt;/span&gt;
                &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="na"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;createdPosts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad del objeto con valor, del valor actual del estado "createdPosts" del componente, obtener su longitud, siendo respectiva la cantidad de elementos al nuevo post creado, así obtendrá un identificador único &lt;/span&gt;
            &lt;span class="o"&gt;**&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="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;BASE_URL&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/posts&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="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Se "espera" la respuesta de la petición web mediante la función asíncrona de peticiones web(fecth), mediante el uso de "await" permite que el código espere hasta que la promesa se resuelva, lo que significa que la solicitud se ha completado con éxito, la cual recibe como primer argumento, el valor de dicha constante, concatenado con dicha cadena de texto, la cual es la ruta para hacer dicha petición web, y como segundo argumento recibe un objeto de "opciones" de la petición para especificar el tipo de petición web que se hará, y demás información necesaria&lt;/span&gt;
                &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad del objeto con valor, para inidicar que será una petición "POST", indicando que se está creando un nuevo recurso en el servidor&lt;/span&gt;
                &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;newPost&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad del objeto la cual es la más importante con valor, desde el objeto JSON, ejecutar su método "stringify" para convertir el objeto newPost a una cadena JSON(texto) que puede ser enviada en la solicitud, el cual recibe como argumento el objeto "newPost" que contiene los datos del nuevo post que se enviarán al servidor&lt;/span&gt;
                &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad del objeto que especifica el encabezado HTTP, con valor de un objeto con las siguientes propiedades&lt;/span&gt;
                    &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Content-type&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="s2"&gt;application/json; charset=UTF-8&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad del objeto que indica que el tipo de contenido del cuerpo de la solicitud es JSON, con valor, de que es un JSON, y que se utiliza el juego de caracteres UTF-8, para así asegurar que el servidor comprenda el formato de los datos enviados y pueda interpretarlos correctamente&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="o"&gt;**&lt;/span&gt;

             &lt;span class="nx"&gt;setTitle&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="c1"&gt;//Se ejecuta la función de actualización del estado que controla el valor del "título" de objeto a ser enviado en la petición web, la cual recibe como argumento, una cadena vacía, para resetear dicho "input" del formulario, siendo dicho valor el nuevo valor por defecto de su estado correspondiente&lt;/span&gt;
            &lt;span class="nx"&gt;setBody&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="c1"&gt;//Se ejecuta la función de actualización del estado que controla el valor del "cuerpo" de objeto a ser enviado en la petición web, la cual recibe como argumento, una cadena vacía, para resetear dicho "input" del formulario, siendo dicho valor el nuevo valor por defecto de su estado correspondiente&lt;/span&gt;
            &lt;span class="nx"&gt;setCreatedPosts&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;prevPosts&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;newPost&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;prevPosts&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt; &lt;span class="c1"&gt;//Se ejecuta la función de actualización del estado "createdPosts", la cual recibe como argumento, una función flecha callback, la cual creará un nuevo arreglo que será el nuevo valor actual de dicho estado, siendo que dicha función callback recibe como argumento todos los "posts"/elementos ya contenidos, y ejecuta, un arreglo, que contiene el valor de dicha constante que es el objeto que se envío a la petición web y que contiene los datos del formulario, siendo colocado al inicio el post recién creado para ser el primero en ser mostrado, y como segundo "elemento" se coloca mediante la sintaxis de "propafación" los posts anteriores almacenados en el estado "prevPosts", manteniendo todos los posts creados previamente&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;error&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 no se pudo ejecutar el bloque de "try", se captura cualquier error que ocurra durante el proceso de creación del post, recibiendo como argumento, el error detectado, ejecutando el siguiente bloque&lt;/span&gt;
            &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;//A la consola del navegador, aplicar el método de errores, el cual recibe como argumento el error detectado para mostrarlo&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;finally&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;//El boque final, se utiliza para resetear el componente a su estado por defecto, ejecutando el siguiente bloque&lt;/span&gt;
            &lt;span class="nx"&gt;setIsLoading&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="c1"&gt;//Se ejecuta la función de actualización del estado que controla que se está "cargando" la petición web, la cual recibe como argumento, el valor booleano "false", para indicar que ya NO se está cargando la petición web, siendo dicho valor el nuevo valor por defecto de su estado correspondiente&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="o"&gt;**&lt;/span&gt;

    &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;Loading&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de función que será un componente, la cual ejecuta el siguiente bloque&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="c1"&gt;//Se retorna una estructura de JSX, el cual será un mensaje de carga a ser renderizado, siendo colocado entre paréntesis&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;Loading...&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="c1"&gt;//Etiqueta de párrafo, la cual contiene el texto a ser mostrado&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="nx"&gt;ShowPost&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;post&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de función que será un componente, recibe como argumento un "post" creado y enviado a la petición web, la cual ejecuta el siguiente bloque&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="c1"&gt;//Se retorna una estructura de JSX, el cual serán los datos del post" creado y enviado a la petición web a ser renderizado, siendo colocado entre paréntesis&lt;/span&gt;
            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta contenedora de bloque
                &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;h2&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;post&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;title&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;h2&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta de subtítulo, la cual contiene entre llaves por ser código de JS, del "post" del parámetro, se accede a su propiedad de "titulo" para obtener su valor
                &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="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;post&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&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; //Etiqueta de párrafo, la cual contiene entre llaves por ser código de JS, del "post" del parámetro, se accede a su propiedad de "body" para obtener su valor
                &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;h4&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;id:&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;post&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;userId&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;h4&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta de subtítulo, la cual contiene texto, y entre llaves por ser código de JS, del "post" del parámetro, se accede a su propiedad de "userId" para obtener su valor
            &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&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;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;isLoading&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="kc"&gt;true&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;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Loading&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt; &lt;span class="c1"&gt;//Antes de renderizar el componente principal, se verifica el valor actual del estado "isLoading" mediante un condicional que valida si, el valor actual de uno de los estados del componente, es estrictamente igual que, el valor booleano true, retornando una estructura de JSX, el cual será el componente &amp;lt;Loading /&amp;gt; a ser renderizado&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="c1"&gt;//Se retorna una estructura de JSX, el cual será un formualrio para obtener los datos que se enviarán mediante la petición web y los mostrarán en un componente debajo del formulario, siendo colocado entre paréntesis&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta contenedora de bloque
            **&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;form&lt;/span&gt; &lt;span class="na"&gt;onSubmit&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;createPost&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;** //Etiqueta de formulario, posee el atributo manejador de eventos de "entregar" los datos del formulario con valor de código de JS entre llaves, ejecutar la función asíncrona para hacer una petición web para crear un nuevo post/publicación para ser enviada como petición al servidor web/URL
                &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;Create a new POST&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; //Etiqueta de título principal, la cual contiene texto a ser mostrado
                &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta contenedora de bloque
                    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;label&lt;/span&gt; &lt;span class="na"&gt;htmlFor&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Título&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;label&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta para etiquetar elementos de interfaz de usuario, posee el atributo "for" para enlazarla con el elemento correspondiente con valor de una cadena de texto la cual es la misma que el identificador del elemento a ser enlazado, y contiene texto
                    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;input&lt;/span&gt; &lt;span class="c1"&gt;//Etiqueta de ingreso de datos, posee los siguients atributos&lt;/span&gt;
                        &lt;span class="na"&gt;onChange&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;setTitle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;target&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="si"&gt;}&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad manejadora del evento de "cambio" en valor de dicho input, con valor dentro de llaves por ser código de JS, de una función flecha, la cual recibe como argumento el evento de "cambio", ejeuctando la función de actualización del estado "title" del componente, la cual recibe como argumento, del evento "cambio" detectado, y acceder al elemento que lo ejecutó, para acceder a su valor, siendo el valor de dicho elemento, el nuevo valor del estado "title" y que será utilizado para colocarlo en dicho elemento &lt;/span&gt;
                        &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="c1"&gt;//"valor" con valor entre llaves por ser código de JS, de el valor actual del estado "title" como el valor del campo de entrada, esto asegura que el valor del campo se actualice automáticamente cuando cambie el estado "title"&lt;/span&gt;
                        &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"title"&lt;/span&gt; &lt;span class="c1"&gt;//Selector "identificador" el cual lo enlazará con el label correspondiente&lt;/span&gt;
                        &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt; &lt;span class="c1"&gt;//"tipo" con valor para ser entrada de texo&lt;/span&gt;
                        &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"title"&lt;/span&gt; &lt;span class="c1"&gt;//"nombre" que es el nombre del control, el cual es enviado con los datos del formulario&lt;/span&gt;
                        &lt;span class="na"&gt;required&lt;/span&gt; &lt;span class="c1"&gt;//"requerido" para ser un campo obligatorio y no puede enviarse vacío&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;div&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;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta contenedora de bloque
                    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;label&lt;/span&gt; &lt;span class="na"&gt;htmlFor&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"body"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Contenido&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;label&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta para etiquetar elementos de interfaz de usuario, posee el atributo "for" para enlazarla con el elemento correspondiente con valor de una cadena de texto la cual es la misma que el identificador del elemento a ser enlazado, y contiene texto
                    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;textarea&lt;/span&gt; &lt;span class="c1"&gt;//Etiqueta de área de texto, posee los siguients atributos&lt;/span&gt;
                        &lt;span class="na"&gt;onChange&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;setBody&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;target&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="si"&gt;}&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad manejadora del evento de "cambio" en valor de dicha área de texto, con valor dentro de llaves por ser código de JS, de una función flecha, la cual recibe como argumento el evento de "cambio", ejeuctando la función de actualización del estado "body" del componente, la cual recibe como argumento, del evento "cambio" detectado, y acceder al elemento que lo ejecutó, para acceder a su valor, siendo el valor de dicho elemento, el nuevo valor del estado "title" y que será utilizado para colocarlo en dicho elemento&lt;/span&gt;
                        &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="c1"&gt;//"valor" con valor entre llaves por ser código de JS, de el valor actual del estado "body" como el valor del área de texto, esto asegura que el valor del área de texto se actualice automáticamente cuando cambie el estado "body"&lt;/span&gt;
                        &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"body"&lt;/span&gt; &lt;span class="c1"&gt;//Selector "identificador" el cual lo enlazará con el label correspondiente&lt;/span&gt;
                        &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"body"&lt;/span&gt; &lt;span class="c1"&gt;//"nombre" que es el nombre del control, el cual es enviado con los datos del formulario&lt;/span&gt;
                        &lt;span class="na"&gt;required&lt;/span&gt; &lt;span class="c1"&gt;//"requerido" para ser un campo obligatorio y no puede enviarse vacío&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;div&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;button&lt;/span&gt; &lt;span class="na"&gt;disabled&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;isLoading&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Crear&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; //Etiqueta de botón, posee la propiedad de "desactivado", con valor entre llaves por ser código de JS, de el valor actual del estado "isLoading" del componente, y contiene texto, así dicha propiedad será controlada respecto del valor del dicho estado
            &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="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;createdPosts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;map&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;post&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;index&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="c1"&gt;//Dentro de llaves por ser código de JS, del estado "createdPosts" del componente el cual es un arreglo que contiente todo los "posts" creados meidante la petición web "POST", al cual se le aplica el método de crear un nuevo arreglo aplicando una función por cada objetos/post dentro de dicho arreglo, la cual recibe como argumento una función flecha, la cual recibe como primer argumento, cada uno de los objetos/post dentro del arreglo, y como segundo argumento el índice de dicho objetos/post dentro del arreglo, ejecutando el siguiente bloque por cada objetos/post&lt;/span&gt;
                &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;ShowPost&lt;/span&gt; &lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;post&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt; &lt;span class="c1"&gt;//Se renderiza como elemento HTML, el componente "ShowPost" el cual posee el atribut de "llave" la cual será una clave única para cada elemento, con valor dentro de llaves por ser código de JS, de el valor de "índice" del objeto/post que se está iterando, y también recibe dentro de llaves por ser código de JS, mediante la sintaxis de "propafación" los posts anteriores almacenados en el estado "createdPosts", manteniendo todos los posts creados previamente &lt;/span&gt;
            &lt;span class="p"&gt;))&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;div&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;h1&gt;
  
  
  AXIOS:
&lt;/h1&gt;

&lt;p&gt;Es una librería que ayuda con el fetching, lo cual son peticiones web, siendo que obligadamente se tiene que hacer la petición web con fetch() y a la respuesta aplicar el método *********&lt;strong&gt;&lt;em&gt;json()&lt;/em&gt;&lt;/strong&gt;*********.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cuando se tienen métodos de autenticación se debe mandar una &lt;strong&gt;API_TOKEN&lt;/strong&gt;, lo cual es que por cada ruta se deberán colocar “headers: {}”, ”{api-key: }” en los cuales se deben mandar los &lt;strong&gt;API_TOKEN.&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;En react, en la mayoría de los componentes se tendrán que utilizar los mismos métodos de configuración.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Axios&lt;/strong&gt; proporciona una forma más práctica de interactuar con las peticiones web:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cliente HTTP basado en promesas para el navegador y node.js.&lt;/li&gt;
&lt;li&gt;Transformaciones automáticas para datos JSON.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Para implementarlo:&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Se debe instalar la librería &lt;strong&gt;axios&lt;/strong&gt; en la ruta del proyecto, mediante ***&lt;strong&gt;&lt;em&gt;npm&lt;/em&gt;&lt;/strong&gt;***:

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;npm install axios&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;Se importa &lt;strong&gt;axios&lt;/strong&gt; desde la librería “&lt;strong&gt;axios”&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;axios&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;axios&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Se importa **axios** desde la librería “**axios”**&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;SINTAXIS:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;axios.get(URL)&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Para el método de obtener recursos web, se debe usar desde la librería de &lt;strong&gt;axios&lt;/strong&gt; el método ***&lt;strong&gt;&lt;em&gt;get&lt;/em&gt;&lt;/strong&gt;*** y enviar como argumento la URL a la cual se le hará la petición.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;axios.post(URL, object)&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Para el método de crear un nuevo recurso en el servidor web, se debe usar desde la librería de &lt;strong&gt;axios&lt;/strong&gt; el método &lt;strong&gt;post&lt;/strong&gt; y enviar como primer argumento la URL a la cual se le hará la petición, y como segundo argumento, el objeto que contiene los datos del nuevo recurso a crear.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Global Configuration:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Axios también proporciona opciones de configuración global que afectan a todas las solicitudes realizadas en la aplicación. Esto permite establecer valores predeterminados para la URL base, encabezados comunes y otras opciones. Al configurar estas opciones a nivel global, se evita tener que repetir estas configuraciones en cada solicitud individual.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;axios.defaults.baseURL = '&lt;a href="https://api.example.com/"&gt;https://api.example.com&lt;/a&gt;';&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Configura la URL base que se utilizará para todas las solicitudes. De esta manera, no es necesario escribir la URL completa en cada solicitud, sino que se puede utilizar una ruta relativa&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;axios.defaults.headers.common['Authorization'] = AUTH_TOKEN;&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Establece un encabezado común de autorización para todas las solicitudes. &lt;strong&gt;AUTH_TOKEN&lt;/strong&gt; debe ser reemplazado por el token de autorización válido para la API, como una cadena de texto o un token de autenticación válido.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Establece el encabezado 'Content-Type' para todas las solicitudes POST realizadas con Axios. Dependiendo de los requisitos de la API, es posible que sea necesario cambiar este valor a &lt;strong&gt;'application/json'&lt;/strong&gt; u otro tipo de contenido adecuado para la solicitud POST&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  EJEMPLO GET AXIOS:
&lt;/h3&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="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useEffect&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="s2"&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;//Se importan la funciones hooks, para controlar los efectos secundarios, y los estados de un componente, desde, la librería de React&lt;/span&gt;
&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;axios&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;axios&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Se importa axios, desde, la librería axios, para realizar solicitudes web HTTP&lt;/span&gt;

&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;axios&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;defaults&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;baseURL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://api.thecatapi.com/v1&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Desde la librería axios, se establecen las configuraciones globales por defecto, estableciendo la URL base para todas las solicitudes Axios, con valor asignado de, una cadena de texto que será la URL API a la cual se le harán las peticiones&lt;/span&gt;
&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;axios&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;defaults&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;common&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;X-Api-Key&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=**&lt;/span&gt; &lt;span class="c1"&gt;//Desde la librería axios, se establecen las configuraciones globales por defecto, estableciendo una "cabecera común" "X-Api-Key" para todas las solicitudes Axios, con valor asiginado de&lt;/span&gt;
    &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;27a5c999-8a4d-4085-951a-bbdc0c23fb6e&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Una cadena de texto, la cual es una clave de API válida proporcionada por la API "The Cat API"&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&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="c1"&gt;//Se exporta como valor por defecto, la declaración de función, que será un componente, la cual ejecuta el siguiente bloque&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;cats&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setCats&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;([]);&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de constante la cual será un estado del componente, en la cual se utiliza la sintaxis de destructuración de arreglos, siendo el primer valor, el valor actual del estado el cual empieza siendo el valor por defecto enviado a "useState", y como segundo valor la función que actualizará el estado, dicha constante tiene valor asignado de, llamar a ejecutar la función importada para el estado del componente, la cual recibe como argumento para el valor por defecto del componente, un arreglo vacío, que contendrá los recursos obtenidos de la petición&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setStatus&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;loading&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de constante la cual será un estado del componente, en la cual se utiliza la sintaxis de destructuración de arreglos, siendo el primer valor, el valor actual del estado el cual empieza siendo el valor por defecto enviado a "useState", y como segundo valor la función que actualizará el estado, dicha constante tiene valor asignado de, llamar a ejecutar la función importada para el estado del componente, la cual recibe como argumento para el valor por defecto del componente, el valor booleano "false", indicando un estado de "cargando" al hacer la petición web, en false porque no se está cargando nada por defecto&lt;/span&gt;

    &lt;span class="nx"&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="c1"&gt;//Se llama a ejecutar la función hook para manejar efectos secundarios en componentes, la cual recibe como primer argumento, una función flecha callback, la cual ejecuta el siguiente bloque&lt;/span&gt;
        &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;loadcats&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de función asíncrona, la cual hará la función de obtener los recursos desde una petición web a un servidor, y que ejecuta el siguiente bloque&lt;/span&gt;
            &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;//Se intenta ejecutar el siguiente bloque&lt;/span&gt;
                &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;axios&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kd"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/categories&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de constante, con valor asignado de, "esperar" la respuesta, de ejecutar, desde la librería de "axios", el método de petición web para obtener rescursos, el cual recibe como argumento, una ruta relativa("/categories") la cual es concatenada en automático con la URL base configurada para uso global&lt;/span&gt;
                &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;newCats&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de constante con valor asignado de, de la respuesta obtenida, obtener los datos, los cuales ya fueron convertidos a formato json para acceder a ellos&lt;/span&gt;
                &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;setCats&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;newCats&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Se ejecuta la función de actualización del estado "cats", el cual recibe como argumento, el valor de los datos de la respuesta a la petición web, siendo dicho valor, el nuevo valor actual del estado&lt;/span&gt;
                &lt;span class="nx"&gt;setStatus&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;success&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;//Se ejecuta la función de actualización del estado "status", el cual recibe como argumento, la cadena de texto "success", siendo dicho valor, el nuevo valor actual del estado&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;error&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 no se pudo ejecutar el bloque de "try", se captura cualquier error que ocurra durante el proceso de creación del post, recibiendo como argumento, el error detectado, ejecutando el siguiente bloque&lt;/span&gt;
                &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;//A la consola del navegador, aplicar el método de errores, el cual recibe como argumento el error detectado para mostrarlo&lt;/span&gt;
                &lt;span class="nx"&gt;setStatus&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;error&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;//Se ejecuta la función de actualización del estado "status", el cual recibe como argumento, la cadena de texto "error", siendo dicho valor, el nuevo valor actual del estado&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="nx"&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="c1"&gt;//Se establece un tiempo de espera, la cual recibe como primer argumento una función flecha callback, la cual ejecuta el siguiente bloque&lt;/span&gt;
            &lt;span class="nx"&gt;loadcats&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;//Se llama a ejcutar la función asíncrona para obtener los recursos desde una petición web con axios&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;//Como segundo argumento, se coloca el tiempo en milisegundos en que será ejecutada dicha función anterior, siendo en un segundo&lt;/span&gt;

    &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;[]);&lt;/span&gt; &lt;span class="c1"&gt;//Como segundo argumento, recibe un arreglo vacío, así ejecutando  el efecto secundario la primera y última vez que se renderice el componente, esto garantiza que el efecto solo se ejecute una vez al inicio&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;loading&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;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Loading...&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;;&lt;/span&gt; &lt;span class="c1"&gt;//Antes de renderizar el componente principal, se verifica el valor actual del estado "status" mediante un condicional que valida si, el valor actual de dicho estado del componente, es estrictamente igual que, la cadena de texto "loading", retornando una estructura de JSX, el cual será un componene, siendo un contendor de bloque, el cual contiene texto a ser mostrado&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&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;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Error&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;;&lt;/span&gt; &lt;span class="c1"&gt;//Antes de renderizar el componente principal, se verifica el valor actual del estado "status" mediante un condicional que valida si, el valor actual de dicho estado del componente, es estrictamente igual que, la cadena de texto "error", retornando una estructura de JSX, el cual será un componene, siendo un contendor de bloque, el cual contiene texto a ser mostrado&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="c1"&gt;//Se retorna una estructura de JSX, el cual será un formualrio para obtener los datos que se enviarán mediante la petición web y los mostrarán en un componente debajo del formulario, siendo colocado entre paréntesis&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta contenedora de bloque
            &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;Cats&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; //Etiqueta de título principal, contiene texto
            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;section&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta de sección dentro de la página
                &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;cats&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;map&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;cat&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="c1"&gt;//Dentro de llaves por ser código de JS, al estado actual del estado "cats" el cual es un arreglo que contiene los objetos de la respuesta a la petición web mediante "axios", se le aplica el método de crear un nuevo arreglo aplicando una función por cada elemento dentro del arreglo iterado, el cual recibe como argumento una función de flecha callback, la cual por cada objeto(cat) dentro de dicho arreglo, se ejecuta el siguiente bloque&lt;/span&gt;
                    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;article&lt;/span&gt; &lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;cat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta de contenido independiente dentro de la página, la cual posee el atributo "key" con el valor de la propiedad "id" de cada obejto(cat), ésto para ayudar a React a identificar de manera única cada elemento y mejorar el rendimiento en operaciones de actualización
                        &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;cat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; - &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;cat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; //Dentro de llaves por ser código de JS, del objeto(cat) acceder al valor de su propiedad "id" para mostrarla, un guión, y entro de llaves por ser código de JS, del objeto(cat) acceder al valor de su propiedad "name" para mostrarla
                    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;article&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="p"&gt;))&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;section&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;div&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;h3&gt;
  
  
  EJEMPLO GET AXIOS:
&lt;/h3&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="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="s2"&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;//Se importa la función hook para controlar el estado de un componente, desde, la librería de react&lt;/span&gt;
&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;axios&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;axios&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Se importa axios, desde, la librería axios, para realizar solicitudes web HTTP&lt;/span&gt;

&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;axios&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;defaults&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;baseURL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://jsonplaceholder.typicode.com&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Desde la librería axios, se establecen las configuraciones globales por defecto, estableciendo la URL base para todas las solicitudes Axios, con valor asignado de, una cadena de texto que será la URL API a la cual se le harán las peticiones&lt;/span&gt;
&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;axios&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;defaults&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;post&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Content-Type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=**&lt;/span&gt; &lt;span class="c1"&gt;//Desde la librería axios, se establecen las configuraciones globales por defecto, estableciendo una "cabecera común" "Content-Type" para todas las solicitudes Axios, con valor asiginado de&lt;/span&gt;
    &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;application/json; charset=UTF-8&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Una cadena de texto, la cual es el tipo de archivo el cual es un json, y que se utiliza el juego de caracteres UTF-8, para así asegurar que el servidor comprenda el formato de los datos enviados y pueda interpretarlos correctamente&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&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="c1"&gt;//Se esporta como valor por defecto, la declaración de función que será un componente, la cual ejecuta el siguiente bloque&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;isLoading&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setIsLoading&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;useState&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="c1"&gt;//Declaración de constante la cual será un estado del componente, en la cual se utiliza la sintaxis de destructuración de arreglos, siendo el primer valor, el valor actual del estado el cual empieza siendo el valor por defecto enviado a "useState", y como segundo valor la función que actualizará el estado, dicha constante tiene valor asignado de, llamar a ejecutar la función importada para el estado del componente, la cual recibe como argumento para el valor por defecto del componente, el valor booleano "false", para indicar un estado de carga, empezando siendo falso&lt;/span&gt;

    &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;createPost&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de función asíncrona para crear un nuevo recurso en un servido web mediante una petición, la cual recibe como argumento un evento ejecutado, y que ejecuta el siguiente bloque&lt;/span&gt;
        &lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;preventDefault&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;//A dicho evento ejecutado, se le aplica el método para prevenir su comportamiento por defecto, para controlarlos&lt;/span&gt;
        &lt;span class="nx"&gt;setIsLoading&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;//Se llama a ejecutar la función de actualización del estado "isLoading", la cual recibe como argumento el valor booleano "true", siendo dicho valor el nuevo valor actual de dicho estado, para indicar que el estado de carga está activo&lt;/span&gt;

        &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;//Se intenta ejecutar el siguiente bloque&lt;/span&gt;
            &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;form&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;currentTarget&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de constante con valor asignado de, del evento ejecutado en la función componente, acceder a elemento que lo ejecutó, el cual es un formulario&lt;/span&gt;
            &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;newPost&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de constante con valor asignado de, un obejto que será el nuevo recurso a  ser creado en el servidor web, el cual contiene las siguientes propiedades&lt;/span&gt;
                &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;form&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;title&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="c1"&gt;//Propiedad de objeto que será el título del recurso, con valor asignado de, del formulario, acceder al elemento que posee el identificador "title", y obtener su valor&lt;/span&gt;
                &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;form&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&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="c1"&gt;//Propiedad de objeto que será el cuerpo del recurso, con valor asignado de, del formulario, acceder al elemento que posee el identificador "body", y obtener su valor&lt;/span&gt;
                &lt;span class="na"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad de objeto que será el identificador del recurso, con valor asignado de, el valor numérico 1&lt;/span&gt;
            &lt;span class="p"&gt;};&lt;/span&gt;

            &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;axios&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/posts&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;newPost&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de constante, con valor asignado de, "esperar" la respuesta, de ejecutar, desde la librería de "axios", el método de petición web para crear rescursos, el cual recibe como primer argumento, una ruta relativa("/posts") la cual es concatenada en automático con la URL base configurada para uso global, y como segundo argumento recibe el objeto "newPost" que será el nuevo recurso a crear&lt;/span&gt;
            &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;//A la consola del navegdor, se le aplica el método de imprimir sobre la misma, la respuesta a la petición web&lt;/span&gt;

            &lt;span class="nx"&gt;form&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;reset&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;//Al formulario, se le aplica el método para reseterarlo, para resetear los campos del mismo&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;error&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 no se pudo ejecutar el bloque de "try", se captura cualquier error que ocurra durante el proceso de creación del post, recibiendo como argumento, el error detectado, ejecutando el siguiente bloque&lt;/span&gt;
            &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;//A la consola del navegador, aplicar el método de errores, el cual recibe como argumento el error detectado para mostrarlo&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;finally&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;//Se ejecuta el bloque final, el cual ejecuta el siguiente bloque&lt;/span&gt;
            &lt;span class="nx"&gt;setIsLoading&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="c1"&gt;//Se llama a ejecutar la función de actualización del estado "isLoading", la cual recibe como argumento el valor booleano "false", siendo dicho valor el nuevo valor actual de dicho estado, para indicar que el estado de carga ya no está activo&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="o"&gt;**&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;isLoading&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="kc"&gt;true&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;(&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Loading...&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;);&lt;/span&gt; &lt;span class="c1"&gt;//Antes de renderizar el componente principal, se verifica el valor actual del estado "isLoading" mediante un condicional que valida si, el valor actual de dicho estado del componente, es estrictamente igual que, el valor booleano "true", retornando una estructura de JSX, el cual será un componene, siendo un contendor de bloque, el cual contiene texto a ser mostrado&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="c1"&gt;//Se retorna una estructura de JSX, el cual será un formualrio para obtener los datos que se enviarán mediante la petición web y los mostrarán en un componente debajo del formulario, siendo colocado entre paréntesis&lt;/span&gt;
        &lt;span class="o"&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="na"&gt;onSubmit&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;createPost&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;** //Etiqueta de formulario, posee el atributo manejador de eventos de "entregar" los datos del formulario con valor de código de JS entre llaves, ejecutar la función asíncrona para hacer una petición web para crear un nuevo post/publicación para ser enviada como petición al servidor web/URL
            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Eiqueta contenedora de bloque
                &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;label&lt;/span&gt; &lt;span class="na"&gt;htmlFor&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Título&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;label&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta para etiquetar elementos de interfaz de usuario, posee el atributo "for" para enlazarla con el elemento correspondiente con valor de una cadena de texto la cual es la misma que el identificador del elemento a ser enlazado, y contiene texto
                &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;input&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"title"&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"title"&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt; //Etiqueta de ingreso de datos, posee un selector identificador, y los atributos de "tipo" con valor para se de entrada de texto, y el de "nombre" que es el nombre del control, el cual es enviado con los datos del formulario
            &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&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;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Eiqueta contenedora de bloque
                &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;label&lt;/span&gt; &lt;span class="na"&gt;htmlFor&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"body"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Contenido&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;label&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta para etiquetar elementos de interfaz de usuario, posee el atributo "for" para enlazarla con el elemento correspondiente con valor de una cadena de texto la cual es la misma que el identificador del elemento a ser enlazado, y contiene texto
                &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;textarea&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"body"&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"body"&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt; //Etiqueta de área de texto, posee un selector identificador y el atributo de "nombre" que es el nombre del control, el cual es enviado con los datos del formulario
            &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&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;button&lt;/span&gt; &lt;span class="na"&gt;disabled&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;isLoading&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Crear&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; //Etiqueta de botón, posee la propiedad de "desactivado", con valor entre llaves por ser código de JS, de el valor actual del estado "isLoading" del componente, y contiene texto, así dicha propiedad será controlada respecto del valor del dicho estado
        &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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>react</category>
      <category>frontend</category>
      <category>webdev</category>
      <category>javascript</category>
    </item>
    <item>
      <title>CSS EN REACT</title>
      <dc:creator>Rodrigo Grau</dc:creator>
      <pubDate>Tue, 15 Aug 2023 01:06:35 +0000</pubDate>
      <link>https://dev.to/rogab0t/css-en-react-1bg5</link>
      <guid>https://dev.to/rogab0t/css-en-react-1bg5</guid>
      <description>&lt;ul&gt;
&lt;li&gt;[ESTILIZANDO CON CSS:]&lt;/li&gt;
&lt;li&gt;[&lt;strong&gt;Plain CSS&lt;/strong&gt;:]&lt;/li&gt;
&lt;li&gt;[MÓDULOS DE CSS:]&lt;/li&gt;
&lt;li&gt;[CSS IN JS:]&lt;/li&gt;
&lt;li&gt;[&lt;strong&gt;Styled Components&lt;/strong&gt;:]&lt;/li&gt;
&lt;li&gt;[Emotion:]&lt;/li&gt;
&lt;li&gt;[Stitches:]&lt;/li&gt;
&lt;li&gt;[TailwindCSS:]&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  ESTILIZANDO CON CSS:
&lt;/h1&gt;

&lt;p&gt;Dentro de React, cuando nosotros utilizamos alguna herramienta para estilizar, se tienen ciertas condiciones las cuales limitan en utilizar alguna u otra herramienta, ca la finalidad de que la experiencia de desarrollo sea más agradable.&lt;/p&gt;

&lt;p&gt;Algunas de éstas herramientas son:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Plain CSS&lt;/strong&gt;: Estilos dentro en un archivo directo “&lt;strong&gt;.css&lt;/strong&gt;”.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CSS Modules&lt;/strong&gt;: Permite aislar los estilos para no tenerlos todos juntos en un solo archivo css, así evitando hacer más compleja la cantidad de estilos para cada uno de los componentes o elementos que se están colocando dentro de la aplicación.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prepocessors&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;SASS&lt;/li&gt;
&lt;li&gt;PostCSS&lt;/li&gt;
&lt;li&gt;LESS&lt;/li&gt;
&lt;li&gt;Stylus&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CSS in JS&lt;/strong&gt;: Es lo mas utilizado dentro de React, es el CSS escrito dentro de un componente o elementos de JSX, y a partir de eso se generan las clases y estilos asignados a dicho elemento.&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;Las maneras más sencillas de aplicar estilos de css en React son las siguientes:&lt;br&gt;
&lt;/p&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="err"&gt;**&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;'btn btn__primary'&lt;/span&gt;&lt;span class="err"&gt;**&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt; &lt;span class="c1"&gt;//Etiqueta de botón, la cual posee un selector de clase, con valor asignado de, una clase "btn" y será un variación con la clase "btn__primary"&lt;/span&gt;

&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="err"&gt;**&lt;/span&gt;&lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"background-color: red"&lt;/span&gt;&lt;span class="err"&gt;**&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt; &lt;span class="c1"&gt;//Etiqueta de botón, la cual posee el atributo de "estilo" para colocar estilos en línea, con valor asignado de, las propiedades de estilos con sus valores correspondientes, dichos estilos serán colocados dentro del mismo atributo separados por punto y coma(;)&lt;/span&gt;

&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="err"&gt;**&lt;/span&gt;&lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;backgroundColor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;red&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="err"&gt;**&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt; &lt;span class="c1"&gt;//Etiqueta de botón, la cual posee el atributo de "estilo" para colocar estilos, con valor asignado de, dentro de llaves por ser código de JS, un objeto dentro de un elemento JSX utilizando la sintaxis de camelCase para las propiedades de estilos y su valor  &lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  &lt;strong&gt;Plain CSS&lt;/strong&gt;:
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Para implementarlo:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Se debe importar el archivo CSS desde su ruta, al archivo JSX donde se aplicarán los estilos. Así todas las clases que estén dentro de éste archivo se van a extender a toda la aplicación.&lt;/li&gt;
&lt;li&gt;Mediante los selectores, ya sean de clase o identificadores, se pueden aplicar los estilos, agregado dichos selectores a los elementos dentro del componente JSX, siendo aplicados dichos estilos al importar el archivo CSS.&lt;/li&gt;
&lt;li&gt;Entre más aisladas se tengan las funcionalidades de los componentes será mejor su uso e implementación.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;En caso de que el componente esté aislado en una carpeta, dicha carpeta será nombrada con el nombre del componente y el archivo JSX será llamado “&lt;strong&gt;index.jsx&lt;/strong&gt;”, así al importar dicho componente mediante su ruta, solo se necesitará colocar la ruta hasta la carpeta nombrada con el nombre del componente.&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="c"&gt;/* style.css */&lt;/span&gt;

&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nc"&gt;.card&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;**&lt;/span&gt; &lt;span class="c"&gt;/*Selector de clase para el elemento que lo posea*/&lt;/span&gt;
    &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;blue&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c"&gt;/*Propiedad de color de fondo, con valor "azul"*/&lt;/span&gt;
    &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;20px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c"&gt;/*Propiedad de margen interno, con valor de 20 pixeles a todos los lados*/&lt;/span&gt;
    &lt;span class="nl"&gt;border-radius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;12px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c"&gt;/*Propiedad de redondeo de esquinas, con valor de 12 pixeles a todas las esquinas*/&lt;/span&gt;
&lt;span class="err"&gt;**&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ul&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;```jsx
// index.jsx

**import './style.css'**; //Se importa el archivo CSS desde su ruta, el cual está ubicado en la misma carpeta de éste componente

export default function **Card()** { //Se exporta como valor por defecto, la decalración de función que será un componente, el cual ejecuta el siguiente bloque
    return ( //Se retorna una estructura de JSX, el cual será el componente a ser renderizado, siendo colocado entre paréntesis
        &amp;lt;div **className="card"** /&amp;gt; //Etiqueta contenedora de bloque, la cual posee un selector de clase, con valor asignado de, la clase dentro del archivo CSS importado, así aplicando los estilos al importar dicho archivo CSS
    );
}
```
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;```jsx
// App.jsx

**import Card from './components/Card'**; //Se importa como valor por defecto, dicho componente, desde, su ruta la cual es colocada hasta el nombre de la carpeta nombrada con el nombre del componente("Card") y que contiene el archivo "index.jsx" el cual es importado en automático sin la necesidad de declararlo, y que también contiene el archivo "style.css" el cual aplica los estilos al componente "index.jsx"

export default function App() { //Se exporta como valor por defecto, la decalración de función que será un componente, el cual ejecuta el siguiente bloque
    return ( //Se retorna una estructura de JSX, el cual será el componente a ser renderizado, siendo colocado entre paréntesis
        &amp;lt;&amp;gt; //Fragmento de React para contener el componente sin ser renderizado dentro de otro elemento
            **&amp;lt;Card /&amp;gt;** //Se llama a ejecutar dicho componente importado, como etiqueta HTML para poder ser renderizado
        &amp;lt;/&amp;gt; 
    );
}
```
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  MÓDULOS DE CSS:
&lt;/h1&gt;

&lt;p&gt;Se incorporó esta funcionalidad dentro del manejo de estilos en React, lo cual permite cargar los estilos desde un archivo aislado y único para cada componente que se puede importar, al cual para acceder a los estilos se hace igual que un objeto.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Se pueden tener tantas variaciones como se necesiten.&lt;/li&gt;
&lt;li&gt;Se pueden tener distintos tipos de implementación para que se puedan aplicar de acuerdo a la funcionalidad que se espera.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;A pesar de escribir estilo de CSS dentro del archivo, la forma en la que se utilizan dentro de un componente es:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Debe ser nombrado, antes de la extensión “*****&lt;strong&gt;&lt;em&gt;.css&lt;/em&gt;&lt;/strong&gt;**&lt;strong&gt;&lt;em&gt;” con la palabra “&lt;/em&gt;&lt;/strong&gt;******&lt;strong&gt;&lt;em&gt;module&lt;/em&gt;&lt;/strong&gt;*********”.&lt;/li&gt;
&lt;li&gt;Importar el archivo de &lt;strong&gt;“módulo de CSS”(Name.module.css)&lt;/strong&gt; para poder implementarlo, esto retorna los estilos asociados en una especie de “objeto”, todas las clases, todos los ID, y todo lo que esté referente en el elemento “root”.&lt;/li&gt;
&lt;li&gt;Para pasar esa configuración de los estilos a un elemento dentro de un componente JSX es vía el ***************&lt;strong&gt;&lt;em&gt;className&lt;/em&gt;&lt;/strong&gt;*************** o el *&lt;strong&gt;&lt;em&gt;id&lt;/em&gt;&lt;/strong&gt;*, indicándole cual va ser la clase o id que se le va a pasar al elemento.&lt;/li&gt;
&lt;li&gt;Para acceder a los estilos y aplicarlos, mediante el selector de clase o identificador en el elemento, dentro de llaves por ser código de JS, se hace al igual que un &lt;strong&gt;objeto&lt;/strong&gt;, mediante el módulo de CSS importado, se accede a la clase o id correspondiente.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Al importar el módulo de CSS, se cargar todas las clases sin importar que no se utilicen, para evitarlo, se puede hacer destructuración:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;import { className } from './Component.module.css';&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="c"&gt;/* Button.module.css */&lt;/span&gt;

&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nc"&gt;.btn&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;**&lt;/span&gt; &lt;span class="c"&gt;/* Selector de clase para el elemento que lo posea */&lt;/span&gt;
    &lt;span class="err"&gt;**&lt;/span&gt;&lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;'red'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="err"&gt;**&lt;/span&gt; &lt;span class="c"&gt;/* Propiedad de color de fondo, con valor "rojo" */&lt;/span&gt;
&lt;span class="err"&gt;**&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    ```jsx
    // Button.jsx

    **import styles from './Button.module.css';** //Se exporta el módulo de estilos de css, desde, su ruta
    export default function Button() { //Se exporta como valor por defecto, la declaración de función que será un componente, el cual ejecuta el siguiente bloque
        return ( //Se retorna una estructura de JSX, el cual será el componente a ser renderizado, siendo colocado entre paréntesis
            &amp;lt;button **className={styles.btn}** /&amp;gt; //Etiqueta de botón, la cual posee un selector de clase, con valor asignado de, dentro de llaves por ser código de JS, desde el módulo de estilos de css, acceder al selector de clase "btn" para aplicar sus estilos correspondientes
        );
    }
    ```
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  CSS IN JS:
&lt;/h1&gt;

&lt;p&gt;Al utilizar el CSS dentro de JS, éste está implícitamente dentro del archivo del mismo componente, y a partir de ahí es como se va atribuyendo la funcionalidad, con la finalidad de tener los estilos y el JS dentro del mismo archivo, teniendo todos los estilos correspondientes solamente a un componente, así aislando la funcionalidad correspondiente a cada una de los componentes y elementos.&lt;/p&gt;

&lt;p&gt;Para el manejo de CSS en JS se tienen muchas herramientas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Styled Components&lt;/strong&gt;:&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Emotion&lt;/strong&gt;:&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;JSS&lt;/strong&gt;:&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stitches&lt;/strong&gt;:&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  &lt;strong&gt;Styled Components&lt;/strong&gt;:
&lt;/h1&gt;

&lt;p&gt;Éstos son componentes estilizados.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Estilos condicionados a través de props.&lt;/li&gt;
&lt;li&gt;CSS-in-JS.&lt;/li&gt;
&lt;li&gt;Puedes extender estilos y reutilizarlos.&lt;/li&gt;
&lt;li&gt;Puedes definir tus estilos con Template Literals o con objetos.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Para implementarlo:&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Se debe instalar la dependencia *******************************&lt;strong&gt;&lt;em&gt;styled-components&lt;/em&gt;&lt;/strong&gt;****************************&lt;strong&gt;&lt;em&gt;, mediante *&lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;npm&lt;/strong&gt;****:

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;npm install --save styled-components&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;Se importa el objeto/función *********&lt;strong&gt;&lt;em&gt;styled&lt;/em&gt;&lt;/strong&gt;********* desde la librería *******************************&lt;strong&gt;&lt;em&gt;styled-components&lt;/em&gt;&lt;/strong&gt;*******************************:&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;styled&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;styled-components&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Se importa el objeto/función "styled", desde la librería 'styled-components'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;Al importar dicha librería se puede acceder al objeto *********&lt;strong&gt;&lt;em&gt;styled&lt;/em&gt;&lt;/strong&gt;******&lt;strong&gt;&lt;em&gt;, el cual contiene todos los elementos de HTML para poderlos definir como un componente de tipo *&lt;/em&gt;&lt;/strong&gt;*************************&lt;strong&gt;&lt;em&gt;styled Component&lt;/em&gt;&lt;/strong&gt;*****************************.&lt;/p&gt;


&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Se debe declarar una variable o constante la cual será el elemento HTML a ser renderizado dentro de un componente, la cual debe tener asignado como valor, desde el objeto ******&lt;strong&gt;&lt;em&gt;&lt;strong&gt;&lt;em&gt;styled&lt;/em&gt;&lt;/strong&gt;&lt;/em&gt;&lt;/strong&gt;****** importado, obtener el &lt;strong&gt;elemento&lt;/strong&gt; &lt;strong&gt;HTML&lt;/strong&gt; requerido, siendo que dicho elemento posee todos sus atributos, siendo controlado igual que un elemento HTML, ya que es lo mismo.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Para aplicar los estilos, hay dos maneras de hacerlo:&lt;/strong&gt;
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Seguido de obtener el &lt;strong&gt;elemento&lt;/strong&gt; &lt;strong&gt;HTML&lt;/strong&gt; requerido se utiliza *************************&lt;strong&gt;&lt;em&gt;interpolación&lt;/em&gt;&lt;/strong&gt;************************* utilizando comillas invertidas &lt;strong&gt;&lt;code&gt;&lt;/code&gt;&lt;/strong&gt;, donde dentro de ellas se colocan los estilos(atributos) de CSS:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;StyledCard&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;styled&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;div&lt;/span&gt;&lt;span class="s2"&gt;`** //Declaración de constante con valor asignado de, del obejto "styled" importado, se obtiene el elemento "contenedor de bloque", y dentro de comillas invertidas se hacer **interpolación** para colocar las siguientes propiedades CSS
    **background-color: blue;** //Propiedad de color de fondo, con valor "azul"
    **padding: 20px;** //Propiedad de margen interno, con valor de 20 pixeles a todos lados
    **border-radius: 15px;** //Propiedad de redondeo de las esquinas, con valor de 15 pixeles a todas las esquinas
**`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;Éste elemento &lt;strong&gt;es un componente&lt;/strong&gt;, es un *****&lt;strong&gt;&lt;em&gt;componente estilizado&lt;/em&gt;&lt;/strong&gt;*****, al cual ya se le asignaron su estilos.&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;Para renderizarlo:&lt;/strong&gt;
&lt;/h3&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- Si solo se necesitan dicho ********componente estilizado********, no hay necesidad de renderizarlo dentro de otro componente que esté dentro del mismo archivo, ya que cada componente debe de estar lo más aislado posible, entonces solo se exporta para ser renderizado en el archivo correspondiente:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    ```jsx
    import **styled** from 'styled-components'; //Se importa el objeto/función "styled", desde la librería 'styled-components'

    const **StyledCard** = **styled.div**` //Declaración de constante con valor asignado de, del obejto "styled" importado, se obtiene el elemento "contenedor de bloque", y dentro de comillas invertidas se hacer interpolación para colocar las siguientes propiedades CSS
        background-color: blue; //Propiedad de color de fondo, con valor "azul"
        padding: 20px; //Propiedad de margen interno, con valor de 20 pixeles a todos lados
        border-radius: 15px; //Propiedad de redondeo de las esquinas, con valor de 15 pixeles a todas las esquinas
    `;

    **export default StyledCard;** //Se exporta como valo por defecto, dicho componente estilizado, para ser renderizado en su lugar correspondiente
    ```
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- **Si se necesitan variaciones del mismo componente**, se debe de tener un componente base, del cual se van a crear sus variaciones, las cuales, al igual que el componente base, deben ser declarados como variables/constantes, a las que se les asigna como valor, acceder al objeto/función **styled**, el cual dentro de paréntesis recibe como argumento el componente base, y se utiliza ****************************interpolación**************************** utilizando comillas invertidas **` `**, donde dentro de ellas se colocan los estilos(atributos) de CSS que harán las variaciones:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    ```jsx
    // index.jsx

    import **styled** from 'styled-components'; //Se importa el objeto/función "styled", desde la librería 'styled-components'

    const **Default** = **styled**.div` //Declaración de constante con valor asignado de, del objeto/función "styled" importado, se obtiene el elemento "contenedor de bloque", y dentro de comillas invertidas se hacer interpolación para colocar las siguientes propiedades CSS
        background-color: gray; //Propiedad de color de fondo, con valor "gris"
        border-radius: 15px; //Propiedad de redondeo de las esquinas, con valor de 15 pixeles a todas las esquinas
        padding: 20px; //Propiedad de margen interno, con valor de 20 pixeles a todos lados
    `;

    const **Primary** = styled(**Default**)` //Declaración de constante con valor asignado de, al objeto/función "styled" importado, se le envía como argumento, el componente "**Default**", adquiriendo sus propiedades CSS y con la posibilidad de modificarlas y agregar nuevas, y dentro de comillas invertidas se hacer interpolación para colocar las siguientes propiedades CSS
        background-color: red; //Propiedad de color de fondo, con valor "rojo"
        border-radius: 15px; //Propiedad de redondeo de las esquinas, con valor de 15 pixeles a todas las esquinas
        padding: 20px; //Propiedad de margen interno, con valor de 20 pixeles a todos lados

    `;

    const **Secondary** = styled(**Default**)` //Declaración de constante con valor asignado de, al objeto/función "styled" importado, se le envía como argumento, el componente "**Default**", adquiriendo sus propiedades CSS y con la posibilidad de modificarlas y agregar nuevas, y dentro de comillas invertidas se hacer interpolación para colocar las siguientes propiedades CSS
        background-color: white; //Propiedad de color de fondo, con valor "blanco"
        border-radius: 15px; //Propiedad de redondeo de las esquinas, con valor de 15 pixeles a todas las esquinas
        border: 2px solid black; //Propiedad de borde, con valor para ser de 2 pixeles de grosor, solido y de color ngro
        padding: 20px; //Propiedad de margen interno, con valor de 20 pixeles a todos lados

    `;

    export { //Se exportan
        **Default**, //Dicho componente estilizado
        **Primary**, //Dicho componente estilizado
        **Secondary**, //Dicho componente estilizado
    }
    ```
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    ```jsx
    //App.jsx

    import { **Default**, **Primary**, **Secondary**,} from './components/Card'; //Se importan, los tres componentes estilizados, para poder acceder a ellos individualmente, desde, su ruta la cual es colocada hasta el nombre de la carpeta nombrada con el nombre del componente("Card") y que contiene el archivo "index.jsx" el cual es importado en automático sin la necesidad de declararlo

    export default function App() { //Se exporta como valor por defecto, la declaración de función que será un componente y que ejecuta el sigueinte bloque
        return ( //Se retorna una estructura de JSX, el cual será el componente a ser renderizado, siendo colocado entre paréntesis
            &amp;lt;&amp;gt; //Fragmento de React para contener el componente sin ser renderizado dentro de otro elemento
                **&amp;lt;Default /&amp;gt;** //Se llama a ejecutar dicho componente estilizado importado, como etiqueta HTML para poder ser renderizado
                **&amp;lt;Primary /&amp;gt;** //Se llama a ejecutar dicho componente estilizado importado, como etiqueta HTML para poder ser renderizado
                **&amp;lt;Secondary /&amp;gt;** //Se llama a ejecutar dicho componente estilizado importado, como etiqueta HTML para poder ser renderizado
            &amp;lt;/&amp;gt; 
        );
    }
    ```
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Seguido de obtener el &lt;strong&gt;elemento&lt;/strong&gt; &lt;strong&gt;HTML&lt;/strong&gt; requerido, al mismo dentro de paréntesis se le envía como argumento un objeto, donde dentro de ellas se colocan los estilos(atributos) de CSS utilizando la sintaxis de &lt;strong&gt;camelCase&lt;/strong&gt; y el valor dentro de comillas &lt;strong&gt;‘ ’&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;DefaultButton&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;styled&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="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de constante con valo asignado de, del objeto/función "styled" importado, se obtiene el elemento "botón" el cual recibe como argumento un objeto con las siguientes propiedades CSS&lt;/span&gt;
    &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="na"&gt;backgroundColor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;gray&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad de color de fondo, con valor "gris"&lt;/span&gt;
    &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;white&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad de color del texto, con valor "blanco"&lt;/span&gt;
&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;});&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Para renderizarlo:&lt;/strong&gt;
&lt;/h3&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- Si dicho componente estilizado necesita contener algo, se hace uso de la propiedad “**{children}**”, a demás de tener que ser renderizado dentro de otro componente para enviarle dicha propiedad:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    ```jsx
    // index.jsx

    import PropTypes from "prop-types"; //Se importa la librería PropTypes, desde, "prop-types" que se utiliza para declarar y validar los tipos de las propiedades que se pasan a los componentes
    import styled from 'styled-components'; //Se importa el objeto/función "styled", desde la librería 'styled-components'

    const **DefaultButton** = styled.button({ //Declaración de constante con valo asignado de, del objeto/función "styled" importado, se obtiene el elemento "botón" el cual recibe como argumento un objeto con las siguientes propiedades CSS
        backgroundColor: 'gray', //Propiedad de color de fondo, con valor "gris"
        color: 'white' //Propiedad de color del texto, con valor "blanco"
        border: '1px solid black', //Propiedad de borde, con valores para ser de 1 pixel de grosor, solido, y de color "negro"
        borderRadius: '3px' //Propiedad de redondeo de las esquinas, con vlaor de 3 pixeles a todas las esquinas
    });

    const PrimarytButton = styled(DefaultButton)` //Declaración de constante con valor asignado de, al objeto/función "styled" importado, se le envía como argumento, el componente "**DefaultButton**", adquiriendo sus propiedades CSS y con la posibilidad de modificarlas y agregar nuevas, y dentro de comillas invertidas se hacer interpolación para colocar las siguientes propiedades CSS
        background-color: white; //Propiedad de color de fondo, con valor "blanco"
        color: black; //Propiedad de color del texto, con valor "negro"
        border: 1px solid gray; //Propiedad de borde, con valores para ser de 1 pixel de grosor, solido, y de color "gris"
        border-radius: 3px; //Propiedad de redondeo de las esquinas, con vlaor de 3 pixeles a todas las esquinas
    `;

    export default function **Button**(**{children, ...props}**) { //Se exporta como valor por defecto, la declaración de función que será un componente, el cual posee un parámetro para recibir la prop children, mediante la sintaxis de destructuración para obtener la prop children la cual representa un elemento hijo que se contendrá dentro de un componente, y que recibe todas las propiedades que se le envíen, la cual ejecuta el siguiente bloque
        return ( //Se retorna una estructura de JSX, el cual será el componente a ser renderizado, siendo colocado entre paréntesis
            **&amp;lt;DefaultButton {...props}&amp;gt;{children}&amp;lt;/DefaultButton&amp;gt;** //Llamar a renderizar dicho componente estilizado, el cual recibe todas las propiedades que se le manden, y la propiedad children
            **&amp;lt;PrimaryButton {...props}&amp;gt;{children}&amp;lt;/PrimaryButton&amp;gt;** //Llamar a renderizar dicho componente estilizado, el cual recibe todas las propiedades que se le manden, y la propiedad children
        );
    }

    **Button**.propTypes = { //A dicho componente, se accede a su propiedad "propTypes" para especificar los tipos de datos esperados para las props, a la cual se le asigna como valor, un objeto con las siguientes propiedades
        **children**: PropTypes.string //Se establece que, la propiedad "children" debe, desde la librería "PropTypes", ser un valor de cadena de texto
    }
    ```
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    ```jsx
    // App.jsx

    import **Button** from './components/Button'; //Se importa como valor por defecto, dicho componente, desde, su ruta la cual es colocada hasta el nombre de la carpeta nombrada con el nombre del componente("Button") y que contiene el archivo "index.jsx" el cual es importado en automático sin la necesidad de declararlo

    export default function App() { //Se exporta como valor por defecto, la declaración de función que será un componente, la cual ejecuta el siguiente bloque
        return ( //Se retorna una estructura de JSX, el cual será el componente a ser renderizado, siendo colocado entre paréntesis
            &amp;lt;&amp;gt; //Fragmento de React para contener el componente sin ser renderizado dentro de otro elemento
                **&amp;lt;Button onClick={() =&amp;gt; alert("button")}&amp;gt;Click me&amp;lt;/Button&amp;gt;** //Se llama a renderizar como etiqueta HTML, dicho componente importado, recibe la prop manejadora de eventos del evento de click sobre éste elemento con valor asignado dentro de llaves por ser código de JS, una función de flecha callback la cual ejecuta la función de ventana emergente la cual cual muestra dicha cadena de texo enviada como argumento, y contiene texto el cual es la propiedad children que necesita el componente estilizado que retorna éste componente
            &amp;lt;/&amp;gt; 
        );
    }
    ```
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Para que un elemento/componente tenga un estilo CONDICIONADO dependiendo de una propiedad:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;En la forma de objeto se tiene la forma de poder pasar los “***&lt;strong&gt;&lt;em&gt;props&lt;/em&gt;&lt;/strong&gt;***” y a partir de ellos, desde afuera se puede dar algún tipo de funcionalidad o comportamiento para como ser verá dicho elemento:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Se declara una constante/variable a la que se le asigna como valor, del objeto/función *********&lt;strong&gt;&lt;em&gt;styled&lt;/em&gt;&lt;/strong&gt;*********, obtener el elemento HTML que se requiera.&lt;/li&gt;
&lt;li&gt;A dicho elemento obtenido, dentro de paréntesis, se le envía como argumento una función de flecha, que mediante dichas *******&lt;strong&gt;&lt;em&gt;props&lt;/em&gt;&lt;/strong&gt;*******, se ejecutará un bloque de código dentro de paréntesis para estilizar el componente/elemento.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;El bloque de código que ejecuta la función que recibe el elemento obtenido, son las propiedades de CSS, las cuales al asignar su valor, se utiliza el operador ternario para condicionar mediante las *******&lt;strong&gt;&lt;em&gt;props&lt;/em&gt;&lt;/strong&gt;*******, el valor de dicha propiedad CSS.&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// index.jsx&lt;/span&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="s2"&gt;prop-types&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//Se importa la librería PropTypes, desde, "prop-types" que se utiliza para declarar y validar los tipos de las propiedades que se pasan a los componentes&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;styled&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;styled-components&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//Se importa el objeto/función "styled", desde la librería 'styled-components'&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;DefaultButton&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;styled&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de constante con valor asignado de, del objeto/función "styled", obtener el elemento "botón", el cual recibe como argumento una función flecha con el objeto "props", la cual ejecuta dentro de paréntesis, las siguientes propiedades de CSS dentro de llaves&lt;/span&gt;
    &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="na"&gt;backgroundColor&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="nx"&gt;disabled&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;red&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="s2"&gt;gray&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad de color de fondo, con valor del operador ternario, el cual valida, del objeto de propiedades, si su propiedad "disabled" está activa(true), el valor será "rojo", de lo contrario será "gris"&lt;/span&gt;
    &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="na"&gt;color&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="nx"&gt;disabled&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;black&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="s2"&gt;white&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad de color del texto, con valor del operador ternario, el cual valida, del objeto de propiedades, si su propiedad "disabled" está activa(true), el valor será "negro", de lo contrario será "blanco"&lt;/span&gt;
&lt;span class="o"&gt;**&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;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;Button&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="nx"&gt;children&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="nx"&gt;props&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="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;//Se exporta como valor por defecto, la declaración de función que será un componente, el cual posee los parámetros para recibir como argumentos, la prop children, mediante la sintaxis de destructuración para obtener la prop children la cual representa un elemento hijo que se contendrá dentro de un componente, y que recibe todas las propiedades que se le envíen, la cual ejecuta el siguiente bloque&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="c1"&gt;//Se retorna una estructura de JSX, el cual será el componente a ser renderizado, siendo colocado entre paréntesis&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&amp;gt;&lt;/span&gt; //Fragmento de React para contener el componente sin ser renderizado dentro de otro elemento
            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;DefaultButton&lt;/span&gt; &lt;span class="err"&gt;**&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="err"&gt;**&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;DefaultButton&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Se llama a renderizar como etiqueta HTML, dicho componente "DefaultButton", recibe todas las props que se le envíen al componene "Button", y recibe la prop "children" que se le envía al componene "Button"
        &lt;span class="p"&gt;&amp;lt;/&amp;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;Button&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="c1"&gt;//A dicho componente, se accede a su propiedad "propTypes" para especificar los tipos de datos esperados para las props, a la cual se le asigna como valor, un objeto con las siguientes propiedades&lt;/span&gt;
    &lt;span class="na"&gt;children&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;object&lt;/span&gt; &lt;span class="c1"&gt;//Se establece que, la propiedad "children" debe, desde la librería "PropTypes", ser un valor de cadena de texto&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;        ```jsx
        // App.jsx

        import Button from './components/Button'; //Se importa como valor por defecto, dicho componente, desde, su ruta la cual es colocada hasta el nombre de la carpeta nombrada con el nombre del componente("Button") y que contiene el archivo "index.jsx" el cual es importado en automático sin la necesidad de declararlo

        export default function App() { //Se exporta como valor por defecto, la declaración de función que será un componente, la cual ejecuta el siguiente bloque
            return ( //Se retorna una estructura de JSX, el cual será el componente a ser renderizado, siendo colocado entre paréntesis
                &amp;lt;&amp;gt; //Fragmento de React para contener el componente sin ser renderizado dentro de otro elemento
                    &amp;lt;Button //Se llama a renderizar como etiqueta HTML, dicho componente importado, el cual recibe las siguientes props
                        **disabled** //Propiedad de "deshabilitado" activada
                        onClick={() =&amp;gt; alert("button")}&amp;gt; //Propiedad manejadora de eventos del evento de click sobre éste elemento con valor asignado dentro de llaves por ser código de JS, una función de flecha callback la cual ejecuta la función de ventana emergente la cual cual muestra dicha cadena de texo enviada com argumento
                        Click me //Contiene texto el cual es la propiedad children que necesita el componente estilizado que retorna éste componente
                    &amp;lt;/Button&amp;gt;
                &amp;lt;/&amp;gt; 
            );
        }
        ```
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Para que un pueda hacer uso de psedoclases:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Al mismo nivel de las propiedades de CSS que recibe el componente, dentro de comillas &lt;strong&gt;‘ ’&lt;/strong&gt;, se coloca *&lt;strong&gt;&lt;em&gt;&amp;amp;:&lt;/em&gt;&lt;/strong&gt;&lt;em&gt;, seguido de la pseudoclase: *&lt;/em&gt;‘&amp;amp;:hover’&lt;strong&gt;, seguido de dos puntos **:&lt;/strong&gt; y dentro de llaves *&lt;strong&gt;&lt;em&gt;{ }&lt;/em&gt;&lt;/strong&gt;*, se colocan las propiedades y valores de CSS que tendrá dicho componente al utilizar la pseudoclase.&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;DefaultButton&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;styled&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="c1"&gt;//Declaración de constante con valo asignado de, del objeto/función "styled" importado, se obtiene el elemento "botón" el cual recibe como argumento un objeto con las siguientes propiedades CSS&lt;/span&gt;
    &lt;span class="na"&gt;backgroundColor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;gray&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad de color de fondo, con valor "gris"&lt;/span&gt;
    &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;white&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad de color del texto, con valor "blanco"&lt;/span&gt;
    &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;&amp;amp;:hover&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="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Pseudoclase de posicionamiento del puntero sobre éste componente, con valor de las siguientes propiedades&lt;/span&gt;
        &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="na"&gt;backgroundColor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;white&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad de color de fondo, con valor "blanco"&lt;/span&gt;
        &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;black&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad de color del texto, con valor "negro"&lt;/span&gt;
    &lt;span class="o"&gt;**&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;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Emotion:
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Posee la mismas características que Styled components.&lt;/li&gt;
&lt;li&gt;Tiene también una funcionalidad similar a los CSS Modules.&lt;/li&gt;
&lt;li&gt;Composition.&lt;/li&gt;
&lt;li&gt;Estilos condicionados out-the-box.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;La diferencia con &lt;strong&gt;Styled Components&lt;/strong&gt; y &lt;strong&gt;Emotion:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Styled Components&lt;/strong&gt;: Se utilizan componentes estilizados, todo funciona como un componente, al cual se le colocan las propiedades de CSS directamente.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Emotion&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Dentro de los componentes se utiliza la propiedad *********&lt;strong&gt;&lt;em&gt;css:{css &lt;code&gt;&lt;/code&gt;}&lt;/em&gt;&lt;/strong&gt;********* importada desde la librería @emotion/react, lo cual hace que los estilo sean en linea, similar a utilizar la propiedad *****&lt;strong&gt;&lt;em&gt;style=""&lt;/em&gt;&lt;/strong&gt;*****.&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;css&lt;/span&gt;&lt;span class="o"&gt;**&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;@emotion/react&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;DefaultButton&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&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;css&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;css&lt;/span&gt;&lt;span class="s2"&gt;`
            background-color: gray;
            color: white;
        `&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="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&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;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;También se pueden crear los estilos por separado en el mismo archivo y asignarlos después al momento de renderizar el componente mediante el atributo &lt;strong&gt;css={ }&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;css&lt;/span&gt;&lt;span class="o"&gt;**&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;@emotion/react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;DefaultButtonStyles&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;css&lt;/span&gt;&lt;span class="s2"&gt;`
    background-color: gray;
    color: white;
`&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;DefaultButton&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="o"&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="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;button&lt;/span&gt; &lt;span class="o"&gt;**&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="o"&gt;**&lt;/span&gt; &lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="nx"&gt;render&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;div&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;DefaultButton&lt;/span&gt; &lt;span class="err"&gt;**&lt;/span&gt;&lt;span class="na"&gt;css&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;DefaultButtonStyles&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="err"&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="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Stitches:
&lt;/h1&gt;

&lt;p&gt;Es una herramienta basada en tokens y variantes, en la cual no hay condicionales.&lt;/p&gt;

&lt;p&gt;Está enfocada más en el ámbito de diseño, no utiliza un ***********&lt;strong&gt;&lt;em&gt;run time&lt;/em&gt;&lt;/strong&gt;***********, sino que se compila en tiempo de ejecución.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Basado en tokens y variantes.&lt;/li&gt;
&lt;li&gt;Es muy similar a StyledComponents y Emotion pero con esteroides.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Framework Agnostic.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Puedes crear temas de forma muy simple.&lt;/li&gt;
&lt;li&gt;Enfocado en temas de performance.&lt;/li&gt;
&lt;li&gt;Genera un sólo componente con diferentes variantes de acuerdo a las necesidades que se tengan.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Variantes:&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Variantes:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Define variantes múltiples de componentes.&lt;/li&gt;
&lt;li&gt;Se define el elemento mediante una variable/constante, se le asigna la función *****&lt;strong&gt;&lt;em&gt;style(’’, {})&lt;/em&gt;&lt;/strong&gt;***** donde se define que elemento/componente se requiere, y se asignan las variantes del elemento por estilos.&lt;/li&gt;
&lt;li&gt;Tiene mayor especificad.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Variantes compuestas:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cuando múltiples variantes coincidan en algunas propiedades, se aplique un estilo específico.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Variantes por defecto:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Para definir, si no se pone ningún tipo de propiedad en el componente, cuales serían los estilos que aplicaría por defecto.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Tematización:
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Tokens:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Definir todas las propiedades CSS con valores específicos y reutilizables, los cuales serán utilizadas mediante tokens: ***********************&lt;strong&gt;&lt;em&gt;nombres clave&lt;/em&gt;&lt;/strong&gt;***********************.&lt;/li&gt;
&lt;li&gt;Permite definir múltiples temas.&lt;/li&gt;
&lt;li&gt;Se definen todos los tokens, lo que permite generar los componentes con base en esos tokens.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Para implementarlo:&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Se debe instalar la dependencia &lt;strong&gt;stitches&lt;/strong&gt;, mediante ***&lt;strong&gt;&lt;em&gt;npm&lt;/em&gt;&lt;/strong&gt;***:

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;npm install @stitches/react&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;Se debe crear un archivo de configuración para definir los tokens, fuera del archivo proyecto y dentro de una carpeta correspondiente al proyecto.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Se debe nombrar: ***************************&lt;strong&gt;&lt;em&gt;stitches.config.js&lt;/em&gt;&lt;/strong&gt;***************************&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Se importa la función *****************&lt;strong&gt;&lt;em&gt;createStitches&lt;/em&gt;&lt;/strong&gt;**************&lt;strong&gt;&lt;em&gt;, desde la librería *&lt;/em&gt;‘@stitches/react’&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// stitches.config.js&lt;/span&gt;

&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;createStitches&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;@stitches/react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Se importa la función "**createStitches**", desde la librería '**@stitches/react**'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Se exporta una constante con la sintaxis de destructuración para acceder a las funcionalidades que contiene la función &lt;strong&gt;createStitches&lt;/strong&gt;, con valor asignado de la función &lt;strong&gt;createStitches&lt;/strong&gt;, la cual recibe como argumento, un objeto con las configuraciones necesarias para el proyecto.&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// stitches.config.js&lt;/span&gt;

&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;createStitches&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;@stitches/react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Se importa la función "createStitches" para crear una nueva instancia de Stitches que se utiliza para definir estilos, desde la librería '@stitches/react'&lt;/span&gt;

&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Se exporta la declración de constante con la sintaxis de destructuración para acceder a las funcionalidades dentro de la función createStitches&lt;/span&gt;
    &lt;span class="nx"&gt;styled&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;css&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;globalCss&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;keyframes&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;getCssText&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;theme&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;createTheme&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;config&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="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;createStitches&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Con valor asignado de ejecutar dicha función para crear una nueva instancia de Stitches que se utiliza para definir estilos, la cual recibe como argumento, un objeto con las siguientes propiedades, las cuales son las configuraciones para el proyecto&lt;/span&gt;
    &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="na"&gt;theme&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad de "tema" para definir los distintos tipos de temas que tendrá el componente&lt;/span&gt;
      &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="na"&gt;colors&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;  &lt;span class="c1"&gt;//Propiedad de colores para el tema, con las siguientes propiedades&lt;/span&gt;
        &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="na"&gt;black100&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;black&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de TOKEN, que hará referencia a un valor de color, con valor asigado de, el color "negro"&lt;/span&gt;
        &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="na"&gt;gray500&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;lightgray&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de TOKEN, que hará referencia a un valor de color, con valor asigado de, el color "lightgray"&lt;/span&gt;
        &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="na"&gt;primary500&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;blue&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de TOKEN, que hará referencia a un valor de color, con valor asigado de, el color "azul"&lt;/span&gt;
        &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="na"&gt;secondary500&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;red&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de TOKEN, que hará referncia a un valor de color, con valor asigado de, el color "rojo"&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;media&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad de pantallas de dispositvos, con las siguientes propiedades&lt;/span&gt;
      &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="na"&gt;bp1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;(min-width: 480px)&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;utils&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;  &lt;span class="c1"&gt;//Propiedad de "utilidades" para estilos específicos mediante una función de flecha que recibe un valor y lo transforma para obtener un estilo CSS específico&lt;/span&gt;
      &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="na"&gt;paddingNormaliced&lt;/span&gt;&lt;span class="p"&gt;:&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="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;value&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="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de propiedad personalizada, con valor asignado de, una función flecha que recibe un valor como argumento, y ejecuta, dentro de paréntesis el cual contiene un objeto, que a su vez posee como propiedad, el estilo CSS, que a su vez posee como valor, el valor recibido multiplicado por cuatro&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="o"&gt;**&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Dentro del archivo del componente, se importa desde el archivo de configuración de stitches, la función &lt;strong&gt;styled&lt;/strong&gt; desde su ruta, para poder aplicar los estilos que se definieron:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;styled&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;../stitches.config.js&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Se importa la función "styled" que se utiliza para definir un nuevo componente estilizado basado en un elemento HTML o en otro componente existente. Se utiliza "styled" para crear estilos y aplicarlos al componente que se está creando, todo dentro de JavaScript, desde, la ruta del archivo de configuración de stitches&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Para aplicar los estilos:&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Se declara una constante la cual será el componente, a la cual se le asigna como valor, ejecutar la función importada &lt;strong&gt;styled(’’, {})&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;La función &lt;strong&gt;styled(’’, {})&lt;/strong&gt; recibe dos parámetros:

&lt;ol&gt;
&lt;li&gt;El elemento que será el componente, el cual se coloca dentro de comillas.&lt;/li&gt;
&lt;li&gt;Los estilos que se le van a aplicar, mediante un objeto.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;Dentro del objeto de la función &lt;strong&gt;styled(’’, {})&lt;/strong&gt;, se colocan dentro del segundo parámetro, &lt;strong&gt;las propiedades CSS&lt;/strong&gt;,  las cuales serán aplicadas por defecto y a todas las variantes, hasta que se declare un estilo que lo cambie.&lt;/li&gt;
&lt;li&gt;Dentro del segundo parámetro, se declara la propiedad “&lt;strong&gt;variants&lt;/strong&gt;”, la cual dentro de un objeto, &lt;strong&gt;se declaran los distintos tipos de variantes como propiedad&lt;/strong&gt; dentro de dicho objeto “&lt;strong&gt;variants&lt;/strong&gt;”, las cuales pueden ser nombradas arbitrariamente, y deben ser separadas por comas.&lt;/li&gt;
&lt;li&gt;Dentro del objeto que declara el tipo de variante, &lt;strong&gt;se declaran las distintas variantes&lt;/strong&gt;, la cual dentro de un objeto se declaran las propiedades CSS que serán aplicados a dicha variante, siendo que a cada propiedad se le asigna como valor, un *********&lt;strong&gt;&lt;em&gt;token:&lt;/em&gt;&lt;/strong&gt;*********

&lt;ul&gt;
&lt;li&gt;Empezado  con el símbolo &lt;strong&gt;$&lt;/strong&gt; seguido del nombre del *******&lt;strong&gt;&lt;em&gt;token&lt;/em&gt;&lt;/strong&gt;******* que hace referencia al valor del estilo que se requiere aplicar, las cuales será separadas por comas.&lt;/li&gt;
&lt;li&gt;Cada token hace referencia a un valor de estilo declarado dentro del archivo de configuración “&lt;strong&gt;stitches.config.js&lt;/strong&gt;”
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Button.jsx&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;styled&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;../stitches.config.js&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//Se importa la función "styled", desde, la ruta del archivo de configuración de stitches&lt;/span&gt;

&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Button&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;styled&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="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de constante, la cual será un componente, con valor asignado de, ejecutar la función "styled" que le declarará los distintos estilos del componente, la cual recibe como primer argumento "el elemento que será el componente", y como segundo argumento un objeto que contendrá sus distintos estilos, los cuales serán los siguientes y serán aplicados a todas las variantes hasta que dicho estilo sea cambiado al declarar el estilo de variante en el componente conrrespondiente&lt;/span&gt;
    &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="na"&gt;borderRadius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;5px&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad de redondeo de las esquinas, con valor de 5 pixeles en cada esquina&lt;/span&gt;
    &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="na"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;0&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad de borde, con valor "0" para no tener borde&lt;/span&gt;
    &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;white&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad de color del texto, con valor "blanco"&lt;/span&gt;
    &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="na"&gt;variants&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad de estilos, las cuales serán las distintas variantes del mismo componente, en un objeto contine los distos tipos de variantes&lt;/span&gt;
        &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="na"&gt;intent&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Variantes por "intención", dentro de un objeto contiene las dintintas variantes por "intención"&lt;/span&gt;
            &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="na"&gt;base&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Variante base, dentro de un objeto posee sus propiedades CSS para aplicar sus respectivos estilos&lt;/span&gt;
                &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;$black100&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad de color del texto, con valor del token que hace referencia a un color declarado dentro de la configuración del archivo "stitches.config.js"&lt;/span&gt;
                &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="na"&gt;backgroundColor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;$gray500&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad de color de fondo, con valor del token que hace referencia a un color declarado dentro de la configuración del archivo "stitches.config.js"&lt;/span&gt;
            &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
            &lt;span class="na"&gt;active&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Variante de "activo", dentro de un objeto posee sus propiedades CSS para aplicar sus respectivos estilos&lt;/span&gt;
                &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="na"&gt;backgroundColor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;$primary500&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad de color de fondo, con valor del token que hace referencia a un color declarado dentro de la configuración del archivo "stitches.config.js"&lt;/span&gt;
            &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
            &lt;span class="na"&gt;disabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Variante de "desactivado", dentro de un objeto posee sus propiedades CSS para aplicar sus respectivos estilos&lt;/span&gt;
                &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="na"&gt;backgroundColor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;$secondary500&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad de color de fondo, con valor del token que hace referencia a un color declarado dentro de la configuración del archivo "stitches.config.js"&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;size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Variantes por "tamaño", dentro de un objeto contiene las dintintas variantes por "tamaño"&lt;/span&gt;
            &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="na"&gt;base&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Variante "base", dentro de un objeto posee sus propiedades CSS para aplicar sus respectivos estilos&lt;/span&gt;
                &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="na"&gt;paddingNormaliced&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="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad personalizada en el archivo de configuraciones, con valor asignado de, el valor numérico 1, el cual será transformado a lo que fue declarado&lt;/span&gt;
                &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="na"&gt;fontSize&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;1em&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad de tamaño de fuente, con valor de 1 vez el tamaño de fuente declarado del elemento contenedor mas cercano&lt;/span&gt;
            &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
            &lt;span class="na"&gt;small&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Variante "pequeña", dentro de un objeto posee sus propiedades CSS para aplicar sus respectivos estilos&lt;/span&gt;
                &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="na"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;2px 6px&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad de margen interno, con valor de, 2 pixeles superior e inferior, y 6 pixeles a los lados&lt;/span&gt;
                &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="na"&gt;fontSize&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;0.6em&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad de tamaño de fuente, con valor de 0.6 veces el tamaño de fuente declarado del elemento contenedor mas cercano&lt;/span&gt;
            &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
            &lt;span class="na"&gt;large&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Variante "grande", dentro de un objeto posee sus propiedades CSS para aplicar sus respectivos estilos&lt;/span&gt;
                &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="na"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;8px 10px&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad de margen interno, con valor de, 8 pixeles superior e imferior, y 10 pixeles a los lados&lt;/span&gt;
                &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="na"&gt;fontSize&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.2em&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad de tamaño de fuente, con valor de 1.2 veces el tamaño de fuente declarado del elemento contenedor mas cercano&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="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;defaultVariants&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad de estilos, los cuales serán los etilos por defecto del componente, en un objeto contine los estilos por defecto que serán aplicados al componente que no será una variante&lt;/span&gt;
        &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="na"&gt;intent&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;base&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad de variante por "intención", con valor de, "base"&lt;/span&gt;
        &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="na"&gt;size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;base&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad de variante por "tamaño", con valor de, "base"&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="o"&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="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;Button&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//Se exporta como valor por defecto, dicho componente "**Button**" con sus estilos aplicados, para poder ser renderizado&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  RESPONSIVE:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Mobile First&lt;/strong&gt;: Se utiliza ‘(min-width: …px)’&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Desktop First&lt;/strong&gt;: Se utiliza ‘(max-width: …px)’&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Las propiedades CSS de los estilos que se colocan primero, en el segundo argumento de la función &lt;strong&gt;styled&lt;/strong&gt;, serán aplicados al break point que se esté trabajando, siendo recomendado empezar por &lt;strong&gt;Mobile First&lt;/strong&gt;, e ir subiendo el tamaño de los break points.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Los break points se definen mediante un token en la propiedad *********&lt;strong&gt;&lt;em&gt;media:{}&lt;/em&gt;&lt;/strong&gt;******&lt;strong&gt;*, dentro de la función **createStitches({})&lt;/strong&gt; en el archivo &lt;strong&gt;stitches.config.js.&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Se declara el token, y como valor, dentro de comillas y de paréntesis se coloca min-width: o max-width:, y se coloca el valor del break point.&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="nx"&gt;media&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad de tamaños de pantalla, con valor de un objeto con las siguientes propiedades&lt;/span&gt;
      &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;bpMobile&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;(min-width: 480px)&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de token, para break point de mobile, con valor asignado de, ancho minimo, de, 480 pixeles&lt;/span&gt;
      &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;bpTablet&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;(min-width: 720px)&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de token, para break point de tablet, con valor asignado de, ancho minimo, de, 720 pixeles&lt;/span&gt;
      &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;bpDesktop&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;(min-width: 1080px)&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de token, para break point de desktop, con valor asignado de, ancho minimo, de, 1080 pixeles&lt;/span&gt;
&lt;span class="p"&gt;},&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Una vez definidos los break points en el archivo &lt;strong&gt;stitches.config.js&lt;/strong&gt;, al declarar los estilos utilizando la función *************&lt;strong&gt;&lt;em&gt;styled(’’, {})&lt;/em&gt;&lt;/strong&gt;**********&lt;strong&gt;&lt;em&gt;, dentro de comillas *&lt;/em&gt;&lt;/strong&gt;&lt;strong&gt;‘ ’&lt;/strong&gt;*&lt;strong&gt;&lt;em&gt;, se coloca, mediante el símbolo *&lt;/em&gt;@&lt;/strong&gt;, el nombre del break point, y para asignar los estilos, se hace mediante un objeto al cual se le colocan las propiedades(estilo) CSS con su valor.&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="nx"&gt;intent&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;//Variantes por "intención", dentro de un objeto contiene las dintintas variantes por "intención"&lt;/span&gt;
    &lt;span class="nl"&gt;base&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;//Variante "base", dentro de un objeto posee sus propiedades CSS para aplicar sus respectivos estilos&lt;/span&gt;
        &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@bpMobile&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="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//token el cual hace refetencia al break point de mobile, con valor de un objeto, el cual contine los siguiente estilos de CSS &lt;/span&gt;
            &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;$mobile&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad de color del texto, con valor del token que hace referencia a un color declarado dentro de la configuración del archivo "stitches.config.js"&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;@bpTablet&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="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//token el cual hace refetencia al break point de tablet, con valor de un objeto, el cual contine los siguiente estilos de CSS &lt;/span&gt;
            &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;$tablet&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad de color del texto, con valor del token que hace referencia a un color declarado dentro de la configuración del archivo "stitches.config.js"&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;@bpDesktop&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="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//token el cual hace refetencia al break point de desktop, con valor de un objeto, el cual contine los siguiente estilos de CSS &lt;/span&gt;
            &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;$desktop&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad de color del texto, con valor del token que hace referencia a un color declarado dentro de la configuración del archivo "stitches.config.js"&lt;/span&gt;
        &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;
        &lt;span class="na"&gt;backgroundColor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;$gray500&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad de color de fondo, con valor del token que hace referencia a un color declarado dentro de la configuración del archivo "stitches.config.js"&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;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Para renderizar:&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Se importa el componente desde la ruta del archivo que lo contiene.&lt;/li&gt;
&lt;li&gt;Se coloca como etiqueta HTML para poder ser renderizado.&lt;/li&gt;
&lt;li&gt;Se le colocan las propiedades que hacen referencia a las variables declaradas dentro de la propiedad “variants” al declarar los estilos del componente.

&lt;ul&gt;
&lt;li&gt;En caso de no necesitar ninguna variante, solo se renderiza el componente y así se le aplicarán los estilos por defecto.
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&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;Button&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/Button&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//Se importa como valor por defecto, el componente estilizado "Button", desde su ruta hasta el archivo del componente si colocar su extensión&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&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="c1"&gt;//Se exporta como valor por defecto, la declaración de función que será un componente, el cual ejecuta el siguiente bloque&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="c1"&gt;//Se retorna una estructura de JSX, el cual será el componente a ser renderizado, siendo colocado entre paréntesis&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&amp;gt;&lt;/span&gt; //Fragmento de React para contener el componente sin ser renderizado dentro de otro elemento
            **&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Click me&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;** //Se renderiza el componente "Button", el cual al no colocarle ningún atributo, se le aplican los estilos por defecto declarados en la propiedad "defaultVariants" y los estilos declarados al inicio del del objeto de estilos que son aplicados a todas las variantes, y contiene texto lo cual es lo que mostrará el componente
            **&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Button&lt;/span&gt;&lt;span class="err"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Se renderiza el componente "Button", el cual recibe las siguientes "props"&lt;/span&gt;
                &lt;span class="err"&gt;**&lt;/span&gt;&lt;span class="na"&gt;intent&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;active&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="err"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad de variante de "intención", con valor asignado dentro de llaves por ser código de JS, como cadena de texto, el valor de la variante que requiere, siendo el de "activo"&lt;/span&gt;
                &lt;span class="err"&gt;**&lt;/span&gt;&lt;span class="na"&gt;size&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;large&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;** //Propiedad de variante de "tamaño", con valor asignado dentro de llaves por ser código de JS, como cadena de texto, el valor de la variante que requiere, siendo el de "grande"
                **Click me** //Contiene texto, lo cual es lo que mostrará el componente
            **&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Button&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;Button&lt;/span&gt;&lt;span class="err"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Se renderiza el componente "Button", el cual recibe las siguientes "props"&lt;/span&gt;
                &lt;span class="err"&gt;**&lt;/span&gt;&lt;span class="na"&gt;intent&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;disabled&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="err"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad de variante de "intención", con valor asignado dentro de llaves por ser código de JS, como cadena de texto, el valor de la variante que requiere, siendo el de "desactivado"&lt;/span&gt;
                &lt;span class="err"&gt;**&lt;/span&gt;&lt;span class="na"&gt;size&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;small&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;** //Propiedad de variante de "tamaño", con valor asignado dentro de llaves por ser código de JS, como cadena de texto, el valor de la variante que requiere, siendo el de "pequeño"
                **Click me** //Contiene texto, lo cual es lo que mostrará el componente
            **&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;**
        &lt;span class="p"&gt;&amp;lt;/&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;h1&gt;
  
  
  TailwindCSS:
&lt;/h1&gt;

&lt;p&gt;Es una herramienta que se considera una “*********************&lt;strong&gt;&lt;em&gt;utility first&lt;/em&gt;&lt;/strong&gt;*********************”, que en este caso provee todas las utilidades necesarias las cuales son la necesidades que se requieren para el comportamiento y visualización de los elementos sin la necesidad de escribir todo el código del CSS.&lt;/p&gt;

&lt;p&gt;Las *****************&lt;strong&gt;&lt;em&gt;utilities&lt;/em&gt;&lt;/strong&gt;***************** son las necesidades que se tienen al momento de escribir en CSS, las cuales son el comportamiento y visualización.&lt;/p&gt;

&lt;p&gt;Así ya no se piensa directamente en el CSS, sino en las utilidades/necesidades requeridas para un elemento, enfocándose en el “*********************&lt;strong&gt;&lt;em&gt;utility first&lt;/em&gt;&lt;/strong&gt;*********************”.&lt;/p&gt;

&lt;p&gt;El performance, a nivel de purgado, solo utiliza las clases que realmente se están utilizando en los componentes de React, así solo se tiene un archivo con las clases que se están utilizando, incrementando el rendimiento.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Provee las utilidades, las cuales pueden ser modificadas.&lt;/li&gt;
&lt;li&gt;Generación de clases en tiempo de construcción.&lt;/li&gt;
&lt;li&gt;Purging.&lt;/li&gt;
&lt;li&gt;Plugins para extender tus clases.&lt;/li&gt;
&lt;li&gt;PostCSS.&lt;/li&gt;
&lt;li&gt;Estilizado condicional con una dependencias.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>react</category>
      <category>javascript</category>
      <category>frontend</category>
    </item>
    <item>
      <title>ESENCIALES DE REACT</title>
      <dc:creator>Rodrigo Grau</dc:creator>
      <pubDate>Tue, 15 Aug 2023 00:56:32 +0000</pubDate>
      <link>https://dev.to/rogab0t/esenciales-de-react-535c</link>
      <guid>https://dev.to/rogab0t/esenciales-de-react-535c</guid>
      <description>&lt;ul&gt;
&lt;li&gt;[PROPS(propiedades):]&lt;/li&gt;
&lt;li&gt;[REDERIZAR MEDIANTE UN ARREGLO:]&lt;/li&gt;
&lt;li&gt;[RENDERIZAR CONDICIONAL:]&lt;/li&gt;
&lt;li&gt;[STATE(estado):]&lt;/li&gt;
&lt;li&gt;[HOOKS:]&lt;/li&gt;
&lt;li&gt;[EVENTOS:]&lt;/li&gt;
&lt;li&gt;[FORMULARIOS:]&lt;/li&gt;
&lt;li&gt;[CONTROLLED COMPONETS:]&lt;/li&gt;
&lt;li&gt;[UNCONTROLLED COMPONETS:]&lt;/li&gt;
&lt;li&gt;[REFERENCIAS:]&lt;/li&gt;
&lt;li&gt;[LISTAS Y LLAVES:]&lt;/li&gt;
&lt;li&gt;[EJEMPLO:]&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  PROPS(propiedades):
&lt;/h1&gt;

&lt;p&gt;Las *******&lt;strong&gt;&lt;em&gt;props&lt;/em&gt;&lt;/strong&gt;******* son como argumentos que le pasamos a una función. Se los pasa un padre a un hijo.&lt;/p&gt;

&lt;p&gt;Es la manera que tienen los componentes para comunicarse entre ellos, es un &lt;strong&gt;objeto&lt;/strong&gt; que contiene propiedades y valores, o alguna propiedad con valor, el cual es enviado como argumento en las funciones que serán componentes, el cual para acceder a dichas *******&lt;strong&gt;&lt;em&gt;props&lt;/em&gt;&lt;/strong&gt;*******, se hace como con un objeto:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Comunicación entre componentes, siendo la comunicación entre el componente padre y el hijo, o viceversa.&lt;/li&gt;
&lt;li&gt;Tienen un flujo de cascada, en ejecución de superior a inferior.&lt;/li&gt;
&lt;li&gt;Podemos mandar cualquier valor(objetos, funciones, string, etc).&lt;/li&gt;
&lt;li&gt;Pueden cambiar a lo largo del tiempo.&lt;/li&gt;
&lt;li&gt;Los componentes de React tienen &lt;strong&gt;prohibido mutar&lt;/strong&gt; las &lt;strong&gt;props&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Para enviar los valores de las props:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Se deben de colocar dentro de la etiqueta que será el componente a ejecutar.&lt;/li&gt;
&lt;li&gt;Se coloca el nombre, el símbolo de asignación y se utilizan llaves, ya que es código de JavaScript.

&lt;ul&gt;
&lt;li&gt;Si es un valor de cadena de texto, se pueden omitir las llaves.&lt;/li&gt;
&lt;li&gt;Si será un objeto, se puede colocar el nombre de la variable que contiene el objeto, o dentro de las llaves declarar el objeto con sus propias llaves y colocando las propiedades y valores.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Así un mismo componente puede renderizar(mostrar) algo distinto dependiendo de las *******&lt;strong&gt;&lt;em&gt;props(propiedades)&lt;/em&gt;&lt;/strong&gt;******* que se le envíen.&lt;/p&gt;

&lt;p&gt;Cuando se tiene un valor que se deduce a partir de una *****&lt;strong&gt;&lt;em&gt;prop&lt;/em&gt;&lt;/strong&gt;***** o un *********&lt;strong&gt;&lt;em&gt;estado&lt;/em&gt;&lt;/strong&gt;******&lt;strong&gt;&lt;em&gt;, se puede guardar en una variable, ya que cada vez que se cambie la *&lt;/em&gt;&lt;/strong&gt;*&lt;strong&gt;&lt;em&gt;prop&lt;/em&gt;&lt;/strong&gt;***** o el *********&lt;strong&gt;&lt;em&gt;estado&lt;/em&gt;&lt;/strong&gt;*********, el componente se va a renderizar así se verá reflejado el cambio en la variable.&lt;/p&gt;

&lt;h2&gt;
  
  
  children:
&lt;/h2&gt;

&lt;p&gt;Ésta es una *****&lt;strong&gt;&lt;em&gt;prop&lt;/em&gt;&lt;/strong&gt;**&lt;strong&gt;&lt;em&gt;(propiedad) llamada *&lt;/em&gt;&lt;/strong&gt;*******&lt;strong&gt;&lt;em&gt;children&lt;/em&gt;&lt;/strong&gt;********&lt;strong&gt;&lt;em&gt;, la cual es un *&lt;/em&gt;&lt;/strong&gt;***********&lt;strong&gt;&lt;em&gt;componente&lt;/em&gt;&lt;/strong&gt;*************** enviado como *****&lt;strong&gt;&lt;em&gt;prop/argumento&lt;/em&gt;&lt;/strong&gt;***** a un componente padre para renderizarlo dentro de dicho padre. Similar al contenido dentro de las etiquetas de HTML.&lt;/p&gt;

&lt;p&gt;Ésta propiedad le indica a un componente que puede contener elementos hijos, uno o muchos, dependiendo de lo que se requiera.&lt;/p&gt;

&lt;p&gt;Dicha *****&lt;strong&gt;&lt;em&gt;prop&lt;/em&gt;&lt;/strong&gt;***** es un &lt;strong&gt;arreglo&lt;/strong&gt; de elementos de React.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Para enviar dicha *************************&lt;strong&gt;&lt;em&gt;prop children&lt;/em&gt;&lt;/strong&gt;**********************&lt;strong&gt;&lt;em&gt;, se hace igual que el contenido de una etiqueta HTML, dentro de las etiquetas del llamado a la función componente, se coloca la *&lt;/em&gt;&lt;/strong&gt;***&lt;strong&gt;&lt;em&gt;prop children&lt;/em&gt;&lt;/strong&gt;*******, la cual es un componente e igual se coloca como etiqueta HTML.&lt;/p&gt;

&lt;p&gt;Para dichas *************************&lt;strong&gt;&lt;em&gt;props children&lt;/em&gt;&lt;/strong&gt;**********************&lt;strong&gt;*, **no&lt;/strong&gt; es necesario contenerlas dentro de un *************&lt;strong&gt;&lt;em&gt;fragment&lt;/em&gt;&lt;/strong&gt;************* o algún contenedor.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Para poder recibir dichas *************************&lt;strong&gt;&lt;em&gt;props children&lt;/em&gt;&lt;/strong&gt;*************************, se puede:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Como parámetro, destructurar para obtener acceder directamente a dicha ***&lt;strong&gt;&lt;em&gt;prop: {children}&lt;/em&gt;&lt;/strong&gt;***&lt;/li&gt;
&lt;li&gt;Como parámetro, colocar “***&lt;strong&gt;&lt;em&gt;props&lt;/em&gt;&lt;/strong&gt;*** y para acceder a dicha *****&lt;strong&gt;&lt;em&gt;prop&lt;/em&gt;&lt;/strong&gt;***** &lt;strong&gt;children&lt;/strong&gt;, se hace mediante llaves por ser código de JS dentro de JSX: &lt;strong&gt;{props.children}&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&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;PropTypes&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;prop-types&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//Se importa la librería PropTypes, desde, "prop-types" que se utiliza para declarar y validar los tipos de las propiedades que se pasan a los componentes&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Avatar&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;./Avatar&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//Se importa como valor por defecto el componente "Avatar", desde, la ruta del archivo&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;Card&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="nx"&gt;children&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="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de función la cual será un componente, posee un parámetro para recibir la ********prop******** **************children**************, mediante la sintaxis de destructuración para obtener la ********prop******** **************children************** la cual representa los elementos hijos que se encuentran contenidos dentro de un componente, la cual ejecuta el siguiente bloque&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="c1"&gt;//Se retorna una estructura de JSX, el cual será el componente a ser renderizado, siendo colocado entre paréntesis&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&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;"card"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta contenedora de bloque, posee un selector de clase, y contiene lo siguiente
            **&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;** //Dentro de llaves por ser código de JS, se renderiza la **********prop children**********, obtenida desde el argumento(********prop********) envíado al componente "******Card******" al llamarlo para ser renderizado
        &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&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="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;Profile&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;//Se exporta como valor por defecto, la declaración de función que será un componente, y que ejecuta el siguiente bloque&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="c1"&gt;//Se retorna una estructura de JSX, el cual será el componente a ser renderizado, siendo colocado entre paréntesis&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Card&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //El llamado a ejecutar dicho componente, el cual recibe y contiene las siguientes ********props children********
        **&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;Rei Ayanami&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;** //prop children, que es una etiqueta de título principal, la cual contiene texto
        **&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Avatar&lt;/span&gt;&lt;span class="err"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//prop children, que es el llamado a ejecutar dicha funicón componente, la cual recibe las siguientes props&lt;/span&gt;
            &lt;span class="err"&gt;****&lt;/span&gt;&lt;span class="na"&gt;size&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="err"&gt;****&lt;/span&gt;&lt;span class="c1"&gt;//prop enviada al componente, la cual será el tamaño, y que tiene valor en código de JS, colocado entre llaves, el valor numérico 100&lt;/span&gt;
            &lt;span class="err"&gt;****&lt;/span&gt;&lt;span class="na"&gt;person&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="o"&gt;****&lt;/span&gt;&lt;span class="c1"&gt;//Propiedad enviada al componente, para los valores necesarios, con valor asignado de, dentro de llaves por ser código de JS, un objeto con las siguiente propiedades&lt;/span&gt;
             &lt;span class="o"&gt;****&lt;/span&gt;   &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Rei Ayanami&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad del objeto, con valor de una cadena de texto&lt;/span&gt;
                &lt;span class="na"&gt;imageId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;YfeOqp2&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad del objeto, con valor de una cadena de texto&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
        &lt;span class="err"&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;Card&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="nx"&gt;Card&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="c1"&gt;//De dicha función componente, se accede a su propiedad estática "propTypes" que es un objeto para especificar los tipos de datos esperados de las propiedades(****props****) de un componente y asegurarse de que sean utilizadas correctamente, el cual es obtenido de la librería "prop-types", y se reasigna su valor para definir las validaciones de tipo para las propiedades person y size del componente "Perfil"&lt;/span&gt;
    &lt;span class="na"&gt;children&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;array&lt;/span&gt; &lt;span class="c1"&gt;//Se establece que, la propiedad "children" debe, desde la librería "PropTypes", ser un arreglo&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  &lt;strong&gt;PropTypes:&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Para saber que *******&lt;strong&gt;&lt;em&gt;props&lt;/em&gt;&lt;/strong&gt;******* recibe un componente y verificar los tipos de datos de las mismas, se hace uso de &lt;strong&gt;PropTypes:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Para declarar las &lt;strong&gt;PropTypes&lt;/strong&gt; de un componente:

&lt;ul&gt;
&lt;li&gt;Se coloca el nombre del componente.&lt;/li&gt;
&lt;li&gt;Se accede a la propiedad &lt;strong&gt;propTypes&lt;/strong&gt; mediante un punto “&lt;strong&gt;.&lt;/strong&gt;”&lt;/li&gt;
&lt;li&gt;Se le asigna como valor un objeto, el cual va a coincidir con el objeto *******&lt;strong&gt;&lt;em&gt;props&lt;/em&gt;&lt;/strong&gt;****&lt;strong&gt;&lt;em&gt;, colocando la misma estructura de *&lt;/em&gt;&lt;/strong&gt;***&lt;strong&gt;&lt;em&gt;props&lt;/em&gt;&lt;/strong&gt;*******.&lt;/li&gt;
&lt;li&gt;A cada propiedad, se le declara de que tipo de dato debe ser, mediante “&lt;strong&gt;PropTypes&lt;/strong&gt;” se coloca el nombre del tipo de dato, y finalmente si es requerido, utilizando “&lt;strong&gt;isRequired&lt;/strong&gt;”.
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&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="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;PropTypes&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;prop-types&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//Se importa la librería PropTypes, desde, "prop-types" que se utiliza para declarar y validar los tipos de las propiedades que se pasan a los componentes&lt;/span&gt;

&lt;span class="nx"&gt;ComponentName&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;propTypes&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;//De dicha función componente, se accede a su propiedad estática "propTypes" que es un objeto para especificar los tipos de datos esperados de las propiedades(****props****) de un componente y asegurarse de que sean utilizadas correctamente, el cual es obtenido de la librería "prop-types", y se reasigna su valor para definir las validaciones de tipo para las propiedades person y size del componente "Perfil"&lt;/span&gt;
    &lt;span class="na"&gt;person&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&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="nx"&gt;shape&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="c1"&gt;//La propiedad "person" que es un objeto, se le asigna como valor para validar su tipo de dato requerido, mediante de la librería "PropTypes" importada, ejecutar su método de validador shape(formas) para validar que una propiedad sea un objeto y especificar los tipos de datos de las propiedades dentro de ese objeto, el cual recibe como argumento un objeto para validar los valores de sus propiedades, donde las claves del objeto representan las propiedades del objeto que se está validando, y los valores representan los validadores para esas propiedades&lt;/span&gt;
        &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&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;string&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;isRequired&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;//Se establece que, la propiedad "name" debe, desde la librería "PropTypes", ser una cadena de texto, y es requerida&lt;/span&gt;
        &lt;span class="na"&gt;imageId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&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;string&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;isRequired&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Se establece que, la propiedad "imageId" debe, desde la librería "PropTypes", ser una cadena de texto, y es requerida&lt;/span&gt;
    &lt;span class="p"&gt;}).&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;isRequired&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;//Asegura que las propiedades especificadas sean requeridas y deben estar presentes cuando se utilice el componente&lt;/span&gt;
    &lt;span class="na"&gt;size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&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;number&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;isRequired&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Se establece que, la propiedad "size" debe, desde la librería "PropTypes", ser un valor numérico, y es requerida&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  EJEMPLO:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;//main.jsx&lt;/span&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;//Se importa la librería de React, desde, react&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;ReactDOM&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-dom/client&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//Se importa la librería de react para manupular el DOM, desde, la librería de "react-dom/client"&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;App&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;./App.jsx&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//Se importa como valor por defecto dicho componente, desde, otro módulo mediante su ruta&lt;/span&gt;

&lt;span class="nx"&gt;ReactDOM&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;createRoot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&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;root&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)).&lt;/span&gt;&lt;span class="nx"&gt;render&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="c1"&gt;//Mediante la librería de react para manipular el DOM, se llama a su método para crear una raíz de React que se utilizará como punto de entrada para renderizar los componentes en el DOM, el cual recibe como argumento, del archivo HTML, obtener el elemento mediante su selector identificador el cual es enviado como argumento en cadena de texto, así dicho elemento será el punto de entrada, al que se le aplica el método de la raíz de React que se encarga de renderizar los componentes en el DOM, el cual recibe la siguiente estructura de JSX&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;StrictMode&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Se utiliza desde la librería de react, el componente para realizar comprobaciones adicionales en desarrollo
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;App&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt; //Se llama a ejecutar dicho componente importado desdes otro módulo, siendo ejecutado como etiqueta HTML para poder ser renderizado
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;StrictMode&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&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 jsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;//App.jsx&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Avatar&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./Avatar&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//Se importa como valor por defecto dicho componente, desde, otro módulo mediante su ruta&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;Profile&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;//Se exporta como valor por defecto, la declaración de función que será un componente, el cual ejecuta el siguiente bloque&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;user1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de variable con valor asignado de un objeto, el cual contiene las siguiente propiedades&lt;/span&gt;
        &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Rei Ayanami&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad del objeto, con valor de una cadena de texto&lt;/span&gt;
        &lt;span class="na"&gt;imageId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;YfeOqp2&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad del objeto, con valor de una cadena de texto&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="c1"&gt;//Se retorna una estructura de JSX, el cual será el componente a ser renderizado, siendo colocado entre paréntesis&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta contenedora de bloque
            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Avatar&lt;/span&gt; &lt;span class="c1"&gt;//Se llama a ejecutar dicho componente importado, ejecutado como etiqueta HTML para poder ser renderizado, el cual recibe las siguientes "**props**"&lt;/span&gt;
                &lt;span class="err"&gt;**&lt;/span&gt;&lt;span class="na"&gt;size&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;150&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="err"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad enviada al componente, para el tamaño, con valor asignado de, dentro de llaves por ser código de JS, el valor numérico 150&lt;/span&gt;
                &lt;span class="err"&gt;**&lt;/span&gt;&lt;span class="na"&gt;person&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;user1&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="err"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad enviada al componente, para. los valores necesarios, con valor asignado de, dentro de llaves por ser código de JS, el valor de dicha variable, el cual es un objeto&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;Avatar&lt;/span&gt; &lt;span class="c1"&gt;//Se llama a ejecutar dicho componente importado, ejecutado como etiqueta HTML para poder ser renderizado, el cual recibe las siguientes "**props**"&lt;/span&gt;
                &lt;span class="err"&gt;**&lt;/span&gt;&lt;span class="na"&gt;size&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="err"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad enviada al componente, para el tamaño, con valor asignado de, dentro de llaves por ser código de JS, el valor numérico 100&lt;/span&gt;
                &lt;span class="err"&gt;**&lt;/span&gt;&lt;span class="na"&gt;person&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;  &lt;span class="c1"&gt;//Propiedad enviada al componente, para los valores necesarios, con valor asignado de, dentro de llaves por ser código de JS, un objeto con las siguiente propiedades&lt;/span&gt;
                    &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Azuka Langley&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad del objeto, con valor de una cadena de texto&lt;/span&gt;
                    &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="na"&gt;imageId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;OKS67lh&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad del objeto, con valor de una cadena de texto&lt;/span&gt;
                &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="err"&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;Avatar&lt;/span&gt; &lt;span class="c1"&gt;//Se llama a ejecutar dicho componente importado, ejecutado como etiqueta HTML para poder ser renderizado, el cual recibe las siguientes "**props**"&lt;/span&gt;
                &lt;span class="err"&gt;**&lt;/span&gt;&lt;span class="na"&gt;size&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="err"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad enviada al componente, para el tamaño, con valor asignado de, dentro de llaves por ser código de JS, el valor numérico 50&lt;/span&gt;
                &lt;span class="err"&gt;**&lt;/span&gt;&lt;span class="na"&gt;person&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad enviada al componente, para. los valores necesarios, con valor asignado de, dentro de llaves por ser código de JS, un objeto con las siguiente propiedades&lt;/span&gt;
                    &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Shinji Ikari&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad del objeto, con valor de una cadena de texto&lt;/span&gt;
                    &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="na"&gt;imageId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;1bX5QH6&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad del objeto, con valor de una cadena de texto&lt;/span&gt;
                &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="err"&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="nt"&gt;div&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;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;//Avatar.jsx&lt;/span&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="s2"&gt;prop-types&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//Se importa la librería PropTypes, desde, "prop-types" que se utiliza para declarar y validar los tipos de las propiedades que se pasan a los componentes&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;Avatar&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="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;//Se exporta como valor por defecto, la declaración de función que será un componente, el cual posee un parámetro para recibir las "props"(propiedades) en un objeto, la cual ejecuta el siguiente bloque&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Perfil&lt;/span&gt; &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;;&lt;/span&gt; &lt;span class="c1"&gt;//Se retorna la ejecución de dicho componente ejecutado como etiqueta HTML para poder ser renderizado, el cual recibe sus "props"(propiedades) desde dicho objeto enviado como argumento a la función, utilizando la sintaxis de "propagación" para pasar todas las propiedades de dicho objeto&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;Perfil&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;person&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;size&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de función que será un componente, el cual recibe mediante la sintaxis de "destructuración", dos argumentos que serán obtenidos desde un objeto "props"(propiedades), para acceder a las propiedades con dichos nombres, así evitando mutar dicho objeto ya que así se crear variable con el nombre declarado en la "destructuración" solo obtenido los valores del objeto&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;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;imageId&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;person&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de variable que destructura las propiedades "name" e "imageId", del objeto "person", que también fue destructurado desde el objeto "props" que se le envía como argumento a la función componente&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;image&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;../public/rei.webp&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de variable con valor asignado de, una cadena de texto la cual es una ruta para obtener una imagen&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="c1"&gt;//Se retorna una estructura de JSX, el cual será el componente a ser renderizado, siendo colocado entre paréntesis&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;img&lt;/span&gt; &lt;span class="c1"&gt;//Etiqueta de imagen, la cual posee los siguiente &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;"avatar"&lt;/span&gt; &lt;span class="c1"&gt;//Selector de clase con sintaxis camelCase, con valor de, una cadena de texto&lt;/span&gt;
            &lt;span class="na"&gt;src&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;image&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="c1"&gt;//Atributo de "fuente", con valor de, el valor de dicha variable, siendo colocado dentro de llaves por ser código de JS&lt;/span&gt;
            &lt;span class="na"&gt;alt&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="c1"&gt;//Atributo de "alternativo" para cuando no pueda ser mostrada la imagen, con valor de, de dicho argumento destructurado en el parámetro de la función el cual es un objeto, acceder al valor de su propiedad "name", siendo colocado dentro de llaves por ser código de JS&lt;/span&gt;
            &lt;span class="na"&gt;width&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;size&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="c1"&gt;//Atributo de ancho, con valor de, el valor de dicho argumento destructurado en el parámetro de la funció, siendo colocado dentro de llaves por ser código de JS&lt;/span&gt;
            &lt;span class="na"&gt;height&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;size&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="c1"&gt;//Atributo de alto, con valor de, el valor de dicho argumento destructurado en el parámetro de la funció, siendo colocado dentro de llaves por ser código de JS&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="nx"&gt;Perfil&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="c1"&gt;//De dicha función componente, se accede a su propiedad estática "propTypes" que es un objeto para especificar los tipos de datos esperados de las propiedades(****props****) de un componente y asegurarse de que sean utilizadas correctamente, el cual es obtenido de la librería "prop-types", y se reasigna su valor para definir las validaciones de tipo para las propiedades person y size del componente "Perfil"&lt;/span&gt;
    &lt;span class="na"&gt;person&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;shape&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="c1"&gt;//La propiedad "person" que es un objeto, se le asigna como valor para validar su tipo de dato requerido, mediante de la librería "PropTypes" importada, ejecutar su método de validador shape(formas) para validar que una propiedad sea un objeto y especificar los tipos de datos de las propiedades dentro de ese objeto, el cual recibe como argumento un objeto para validar los valores de sus propiedades, donde las claves del objeto representan las propiedades del objeto que se está validando, y los valores representan los validadores para esas propiedades&lt;/span&gt;
        &lt;span class="na"&gt;name&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;string&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;span class="c1"&gt;//Se establece que, la propiedad "name" debe, desde la librería "PropTypes", ser una cadena de texto, y es requerida&lt;/span&gt;
        &lt;span class="na"&gt;imageId&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;string&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;isRequired&lt;/span&gt; &lt;span class="c1"&gt;//Se establece que, la propiedad "imageId" debe, desde la librería "PropTypes", ser una cadena de texto, y es requerida&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;span class="c1"&gt;//Asegura que las propiedades especificadas sean requeridas y deben estar presentes cuando se utilice el componente&lt;/span&gt;
    &lt;span class="na"&gt;size&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;number&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;isRequired&lt;/span&gt; &lt;span class="c1"&gt;//Se establece que, la propiedad "size" debe, desde la librería "PropTypes", ser un valor numérico, y es requerida&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  REDERIZAR MEDIANTE UN ARREGLO:
&lt;/h1&gt;

&lt;p&gt;Para renderizar elementos mediante un arreglo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Se hace uso de la función *******&lt;strong&gt;&lt;em&gt;map()&lt;/em&gt;&lt;/strong&gt;*******, la cual será aplicada al arreglo a ser iterado y la cual recibirá una función para rendererizar elementos que usen los valores dentro del arreglo.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;frutas&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de variable con valor asigando de, un arreglo con varios valores de cadena de texto&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;banana&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="s2"&gt;pera&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="s2"&gt;manzana&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="s2"&gt;uva&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="s2"&gt;sandía&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="s2"&gt;cereza&lt;/span&gt;&lt;span class="dl"&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="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;ListaFrutas&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;//Se exporta como valor por defecto, la declaración de función que será un componente, la cual ejecuta el siguiente bloque&lt;/span&gt;
    &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;renderizarFruta&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;fruta&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="c1"&gt;//Declaración de función anidada, la cual posee un parámetro para recibir como argumento cada uno de los valores dentro del arreglo a ser iterado con map, y que ejecuta el siguiente bloque&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="c1"&gt;//Se retorna una estructura de JSX, el cual será el componente a ser renderizado, siendo colocado entre paréntesis&lt;/span&gt;
            &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;li&lt;/span&gt; &lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;fruta&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;fruta&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;li&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Etiqueta de elemento listado, la cual posee la propiedad "******key******" necesaria cuando se renderizan listas de elementos para que React pueda identificarlos de manera única y optimizar el proceso de actualización, con valor del mismo valor enviado como argumento a la función "renderizarFruta", siendo dicho elemento listado contiene dentro de llaves por ser código de JS el valor enviado como argumento a la función "renderizarFruta", así por cada valor dentro del arreglo&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="c1"&gt;//Se retorna una estructura de JSX, el cual será el componente a ser renderizado, siendo colocado entre paréntesis&lt;/span&gt;
            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta contenedora de bloque, la cual contiene lo siguiente
                  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;h2&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Las frutas que hay son:&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;h2&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta de subtítulo, el cual contiene texto
                  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;ul&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;**&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;frutas&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;renderizarFruta&lt;/span&gt;&lt;span class="p"&gt;)&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;ul&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiquta de lista desordenada, la cual contiene entro de llaves por ser código de JS, a dicho arreglo "frutas", aplica el método de "crear un nuevo arreglo con cambios" el cual recibe como argumento, la función renderizarFruta, la cual retorna un elemento listado por cada uno de os valores dentro del arreglo "frutas"
            &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&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;h1&gt;
  
  
  RENDERIZAR CONDICIONAL:
&lt;/h1&gt;

&lt;p&gt;En react cuando se necesita renderizar componentes de manera condicional, se hace:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dentro de llaves por ser código de JS “*&lt;strong&gt;&lt;em&gt;{ }&lt;/em&gt;&lt;/strong&gt;*”.&lt;/li&gt;
&lt;li&gt;Se coloca la condición a cumplir.&lt;/li&gt;
&lt;li&gt;Se coloca el operador &lt;strong&gt;and(&amp;amp;&amp;amp;).&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Finalmente se llama a ejecutar el componente cómo etiqueta HTML, ***&lt;strong&gt;&lt;em&gt;.&lt;/em&gt;&lt;/strong&gt;***&lt;br&gt;
&lt;/p&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="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;show&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setShow&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de constante la cual será un estado del componente, en la cual se utiliza la sintaxis de destructuración de arreglos, siendo el primer valor, el valor actual del estado el cual empieza siendo el valor por defecto enviado a "useState", y como segundo valor la función que actualizará el estado, dicha constante tiene valor asignado de, llamar a ejecutar la función importada para el estado del componente, la cual recibe como argumento para el valor por defecto del componente, el valor booleano true&lt;/span&gt;

&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="c1"&gt;//Se retorna una estructura de JSX, el cual será el componente a ser renderizado, siendo colocado entre paréntesis&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta contenedora de bloque
        **&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;show&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Component&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;** //Dentro de llaves por ser código de JS, se valida la condición de que si "**show**" que es el valor actual del estado del componente tiene valor "true", mediante el operador and(&lt;span class="err"&gt;&amp;amp;&amp;amp;&lt;/span&gt;), llamar a ejecutar dicho otro componente como etiqueta de HTML para ser renderizado, de lo contrario no se hace nada
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;También se puede utilizar el operador ternario:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dentro de llaves por ser código de JS “*&lt;strong&gt;&lt;em&gt;{ }&lt;/em&gt;&lt;/strong&gt;*”.&lt;/li&gt;
&lt;li&gt;Se coloca la condición a cumplir.&lt;/li&gt;
&lt;li&gt;Se coloca el símbolo “&lt;strong&gt;?&lt;/strong&gt;”.&lt;/li&gt;
&lt;li&gt;Finalmente se llama a ejecutar el componente como etiqueta HTML, ***&lt;strong&gt;&lt;em&gt;.&lt;/em&gt;&lt;/strong&gt;***&lt;/li&gt;
&lt;li&gt;Se coloca el símbolo “&lt;strong&gt;:&lt;/strong&gt;”.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Y finalmente se coloca el caso en que no se cumpla la condición.&lt;br&gt;
&lt;/p&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="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;show&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setShow&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de constante la cual será un estado del componente, en la cual se utiliza la sintaxis de destructuración de arreglos, siendo el primer valor, el valor actual del estado el cual empieza siendo el valor por defecto enviado a "useState", y como segundo valor la función que actualizará el estado, dicha constante tiene valor asignado de, llamar a ejecutar la función importada para el estado del componente, la cual recibe como argumento para el valor por defecto del componente, el valor booleano true&lt;/span&gt;

&lt;span class="o"&gt;****&lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="c1"&gt;//Se retorna una estructura de JSX, el cual será el componente a ser renderizado, siendo colocado entre paréntesis&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta contenedora de bloque
        **&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;show&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;Component&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;** //Dentro de llaves por ser código de JS, se valida la condición de que si "**show**" que es el valor actual del estado del componente tiene valor "true", mediante el operador ternario(? :), llamar a ejecutar dicho otro componente como etiqueta de HTML para ser renderizado, de lo contario, si su valor es "false", se retorna "nulo", para no renderizar nada
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  STATE(estado):
&lt;/h1&gt;

&lt;p&gt;El estado es como la memoria de un componente. El componente debe “&lt;strong&gt;recordar&lt;/strong&gt;” esto.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;El estado solo se puede usar en funciones que serán componentes.&lt;/li&gt;
&lt;li&gt;El estado &lt;strong&gt;no se muta directamente&lt;/strong&gt;, sino que lo actualizamos mediante una función.&lt;/li&gt;
&lt;li&gt;Es donde un componente guarda cierta información y la puede cambiar como respuesta a interacciones.&lt;/li&gt;
&lt;li&gt;Se pueden tener más de un solo estado en un componente.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;useState()&lt;/strong&gt; es una función que se importa desde la librería de React, la cual recibe como argumento un valor por defecto.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;useState()&lt;/strong&gt; retorna un arreglo de elementos, el cual para acceder a ellos es necesario la sintaxis de *****************************&lt;strong&gt;&lt;em&gt;destructuración:&lt;/em&gt;&lt;/strong&gt;*****************************

&lt;ul&gt;
&lt;li&gt;Siendo el primer valor, el &lt;strong&gt;valor actual del estado&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Como segundo valor, se retorna una &lt;strong&gt;función&lt;/strong&gt;, la cual al ser llamada y enviarle un valor como argumento, hará la &lt;strong&gt;actualización del estado&lt;/strong&gt; y dicho valor enviado como argumento será el nuevo valor del estado y será el que se mostrará siendo renderizado.
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&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="p"&gt;{&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;useState&lt;/span&gt;&lt;span class="o"&gt;**&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="s2"&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;//Se importa la función hook "useState", desde la librería de react, para agregar el estado a los componentes&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&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="c1"&gt;//Se exporta como valor por defecto, la declación de función que será un componente, la cual ejecuta el siguiente bloque&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="c1"&gt;//Se retorna una estructura de JSX, el cual será el componente a ser renderizado, siendo colocado entre paréntesis&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Contenedor de bloque
            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Counter&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt; //Se llama a ejecutar dicho componente importado, ejecutado como etiqueta HTML para poder ser renderizado
        &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&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="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;Counter&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de función que será un componente, la cual ejecuta el siguiente bloque&lt;/span&gt;
    &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;age&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setAge&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;useState&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="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de constante la cual será un estado del componente, en la cual se utiliza la sintaxis de destructuración de arreglos, siendo el primer valor, el valor actual del estado el cual empieza siendo el valor por defecto enviado a "useState", y como segundo valor la función que actualizará el estado, dicha constante tiene valor asignado de, llamar a ejecutar la función importada para el estado del componente, la cual recibe como argumento para el valor por defecto del componente, el valor numérico "0"&lt;/span&gt;
    &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setName&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Name&lt;/span&gt;&lt;span class="dl"&gt;"&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="c1"&gt;//Declaración de constante la cual será un estado del componente, en la cual se utiliza la sintaxis de destructuración de arreglos, siendo el primer valor, el valor actual del estado el cual empieza siendo el valor por defecto enviado a "useState", y como segundo valor la función que actualizará el estado, dicha constante tiene valor asignado de, llamar a ejecutar la función importada para el estado del componente, la cual recibe como argumento para el valor por defecto del componente, el valor numérico "Name"&lt;/span&gt;

    &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;inputContent&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;//Declaración función, la cual ejecuta el siguiente bloque&lt;/span&gt;
        &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;input&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="nx"&gt;querySelector&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;.name&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de variable con valor asignado de, del documento HTML, obtener el primer elemento mediante su selector, el cual es el de clase enviado como cadena de texto &lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;input&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="c1"&gt;//Se retorna, del elemento obtenido mediante su selector, su valor ingresado&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="c1"&gt;//Se retorna una estructura de JSX, el cual será el componente a ser renderizado, siendo colocado entre paréntesis&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&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;"counter"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Contendor de bloque, posee un selector de clase
            &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;My age is: &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;age&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; years old&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; //Etiqueta de título pricipal, la cual contiene texto y dentro de llaves por ser código de JS, el valor de "age" el cual es uno de los valores actuales del componente
            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&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="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;setAge&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;age&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="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Sumar uno&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; //Etiqueta de botón, el cual recibe como "prop"(propiedad) siendo un atributo, el manejador de eventos en respuesta a un clic del mouse en el botón, con valor asignado de, dentro de llaves por ser código de JS, una función de flecha, la cual llama a ejecutar la función de actualización del estado la cual recibe como argumento, el valor actual del componente("age") y se le suma el valor numérico 1, siendo el resultado, el nuevo valor actual del compente, y dicha etiqueta contiene texto
            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&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="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;setAge&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;age&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="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Restar uno&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; //Etiqueta de botón, el cual recibe como "prop"(propiedad) siendo un atributo, el manejador de eventos en respuesta a un clic del mouse en el botón, con valor asignado de, dentro de llaves por ser código de JS, una función de flecha, la cual llama a ejecutar la función de actualización del estado la cual recibe como argumento, el valor actual del componente("age") y se le resta el valor numérico 1, siendo el resultado, el nuevo valor actual del componente, y dicha etiqueta contiene texto
            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&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="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;setAge&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;age&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Sumar diez&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; //Etiqueta de botón, el cual recibe como "prop"(propiedad) siendo un atributo, el manejador de eventos en respuesta a un clic del mouse en el botón, con valor asignado de, dentro de llaves por ser código de JS, una función de flecha, la cual llama a ejecutar la función de actualización del estado la cual recibe como argumento, el valor actual del componente("score") y se le suma el valor numérico 10, siendo el resultado, el nuevo valor actual del componente, y dicha etiqueta contiene texto
            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&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="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;setAge&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;age&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Restar diez&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; //Etiqueta de botón, el cual recibe como "prop"(propiedad) siendo un atributo, el manejador de eventos en respuesta a un clic del mouse en el botón, con valor asignado de, dentro de llaves por ser código de JS, una función de flecha, la cual llama a ejecutar la función de actualización del estado la cual recibe como argumento, el valor actual del componente("age") y se le resta el valor numérico 10, siendo el resultado, el nuevo valor actual del componente, y dicha etiqueta contiene texto
            &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;My name is: &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="o"&gt;**&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; //Etiqueta de título pricipal, la cual contiene texto y dentro de llaves por ser código de JS, el valor de "name" el cual es uno de los valores actuales del componente
            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;input&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"text"&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;"name"&lt;/span&gt;&lt;span class="p"&gt;/&amp;gt;&lt;/span&gt; //Etiqueta de ingreso de datos, la cual recibe como "prop"(propiedad) siendo un atributo, el tipo de ingreso de datos con valor de texto, y posee un selctor de clae
            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&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="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;setName&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;inputContent&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Establecer&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; //Etiqueta de botón, el cual recibe como "prop"(propiedad) siendo un atributo, el manejador de eventos en respuesta a un clic del mouse en el botón, con valor asignado de, dentro de llaves por ser código de JS, una función de flecha, la cual llama a ejecutar la función de actualización del estado la cual recibe como argumento, la función para obtener el valor del input siendo el retorno de la misma, el nuevo valor actual del componente, y dicha etiqueta contiene texto
        &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&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;ul&gt;
&lt;li&gt;Al cambiar el estado, React detecta que hubo cambios y hay que reflejarlos en la pantalla, renderizándolos.&lt;/li&gt;
&lt;li&gt;Si lo que se necesita para hacer un nuevo render con una variable que cambie a lo largo de tiempo, lo necesario es el ***********&lt;strong&gt;&lt;em&gt;state(estado).&lt;/em&gt;&lt;/strong&gt;*********** React no renderiza las mutaciones de las variables  porque no detecta dichos cambios.&lt;/li&gt;
&lt;li&gt;React junta todos los cambios en los estados, los realiza y el estado cambio y finalmente los renderiza todos juntos.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;El hook &lt;strong&gt;useState()&lt;/strong&gt; es esencial para crear componentes funcionales con estado en React, lo que te permite mantener la coherencia y reactividad en tu aplicación mientras manipulas y actualizas datos de manera sencilla.&lt;/p&gt;

&lt;h1&gt;
  
  
  HOOKS:
&lt;/h1&gt;

&lt;p&gt;Los hooks son funciones que en general comienzan con *****&lt;strong&gt;&lt;em&gt;use&lt;/em&gt;&lt;/strong&gt;*****, y permiten reutilizar código. Algunas son:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;useState()&lt;/strong&gt;: Para manejar el estado de los componentes y renderizar los cambios respecto al cambio del estado.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;useEffect()&lt;/strong&gt;: Para manejar los efectos secundarios de los componentes respecto a cambio de valor de una propiedad del componente.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;useRef()&lt;/strong&gt;: Para  ****acceder directamente al elemento HTML mediante el DOM. Las referencias no provocan una actualización del componente cuando cambian su valor, y tampoco provocan una nueva renderización.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;useImperativeHandle()&lt;/strong&gt;:  Permite pasar y acceder a la referencia de un elemento del DOM.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  REGLAS:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;No puede estar dentro de un condicional if.&lt;/li&gt;
&lt;li&gt;Se tienen que llamar en el top-level(parte superior) del componente.&lt;/li&gt;
&lt;li&gt;Solo se puede invocar en funciones que serán componentes (o en otros hooks).&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  useEffect(function, [ , ]):
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Se usa para realizar efectos secundarios en un componente.&lt;/li&gt;
&lt;li&gt;Se ejecuta luego de los cambios del DOM.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Recibe dos argumentos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Una función&lt;/strong&gt;: Ésta función puede no retornar nada o retornar a su vez otra función, la cual es llamada “clean up”, porque suele “limpiar” acciones y es la última en ser ejecutada.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Un array de dependencias (opcional)&lt;/strong&gt;: Puede ser un arreglo vacío o un arreglo con dependencias:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Si no se recibe dicho arreglo, el efecto se va a ejecutar &lt;strong&gt;cada vez que se renderice el componente&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Si se recibe un arreglo  vacío, el efecto se va a ejecutar &lt;strong&gt;la primera y última vez que se renderice el componente&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Se se recibe un arreglo con dependencias, el efecto se va a ejecutar &lt;strong&gt;cada vez que cambie&lt;/strong&gt; algún elemento del arreglo de dependencias.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Dichas dependencias son valores son valores que están relacionadas con los componentes, las cuales pueden ser modificadas y cambiar con el tiempo, pueden ser “*******&lt;strong&gt;&lt;em&gt;props&lt;/em&gt;&lt;/strong&gt;*******” enviadas al componente.&lt;/p&gt;


&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;Se recomienda el uso de ***************&lt;strong&gt;&lt;em&gt;useEffect&lt;/em&gt;&lt;/strong&gt;*************** cuando:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Se necesita agregar un “listener”(escuchador).&lt;/li&gt;
&lt;li&gt;Que se requiera hacer algo cuando se cambie el valor de una “*****&lt;strong&gt;&lt;em&gt;prop&lt;/em&gt;&lt;/strong&gt;*****” del componente.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;EJEMPLO:&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="k"&gt;import&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="s2"&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;//Se importa la función hook para manejar el estadoo en componentes, desde, la libreriía de react&lt;/span&gt;
&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useEffect&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="s2"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Se importa la función hook para manejar efectos secundarios en componentes, desde, la libreriía de react&lt;/span&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="s2"&gt;prop-types&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//Se importa la librería PropTypes, desde, "prop-types" que se utiliza para declarar y validar los tipos de las propiedades que se pasan a los componentes&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&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="c1"&gt;//Se exporta como valor por defecto, la declaración de función que será un componente, la cual ejecuta el siguiete bloque&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;show&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setShow&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de constante la cual será un estado del componente, en la cual se utiliza la sintaxis de destructuración de arreglos, siendo el primer valor, el valor actual del estado el cual empieza siendo el valor por defecto enviado a "useState", y como segundo valor la función que actualizará el estado, dicha constante tiene valor asignado de, llamar a ejecutar la función importada para el estado del componente, la cual recibe como argumento para el valor por defecto del componente, el valor booleano "true"&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;counter&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setCounter&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;useState&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="c1"&gt;//Declaración de constante la cual será un estado del componente, en la cual se utiliza la sintaxis de destructuración de arreglos, siendo el primer valor, el valor actual del estado el cual empieza siendo el valor por defecto envuiado a "useState", y como segundo valor la función que actualizará el estado, dicha constante tiene valor asignado de, llamar a ejecutar la función importada para el estado del componente, la cual recibe como argumento para el valor por defecto del componente, el valor numérico "0"&lt;/span&gt;

    &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;open&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de función para mostrar un elemento en el DOM, la cual ejecuta el siguiente bloque&lt;/span&gt;
        &lt;span class="nx"&gt;setShow&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;//Se llama a ejecutar la función de actualización del estado la cual recibe como argumento, el valor booleano "true"&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;close&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de función para ocultar un elemento en el DOM, la cual ejecuta el siguiente bloque&lt;/span&gt;
        &lt;span class="nx"&gt;setShow&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="c1"&gt;//Se llama a ejecutar la función de actualización del estado la cual recibe como argumento, el valor booleano "false"&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;addCounter&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de función para modificar el valor de un estado del componente, la cual ejecuta el siguiente bloque&lt;/span&gt;
        &lt;span class="nx"&gt;setCounter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;counter&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="c1"&gt;//Se llama a ejecutar la función de actualización del estado la cual recibe como argumento, el valor actual del dicho estado, y se le suma el valor numérico 1, siendo el resultado el nuevo valor actual del componente&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;removeCounter&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de función para modificar el valor de un estado del componente, la cual ejecuta el siguiente bloque&lt;/span&gt;
        &lt;span class="nx"&gt;setCounter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;counter&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="c1"&gt;//Se llama a ejecutar la función de actualización del estado la cual recibe como argumento, el valor actual del dicho estado, y se le resta el valor numérico 1, siendo el resultado el nuevo valor actual del componente&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="c1"&gt;//Se retorna una estructura de JSX, el cual será el componente a ser renderizado, siendo colocado entre paréntesis&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&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;"app"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta contenedora de bloque, la cual recibe una "prop" que es un selector de clase, con valor de una cadena de texto
            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;open&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Abrir&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; //Etiqueta de botón, el cual recibe como "prop"(propiedad) siendo un atributo, el manejador de eventos en respuesta a un clic del mouse en el botón, con valor asignado de, dentro de llaves por ser código de JS, llamar a la función para mostrar un elemento en el DOM, y dicho botón contiene texto 
            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;close&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Cerrar&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; //Etiqueta de botón, el cual recibe como "prop"(propiedad) siendo un atributo, el manejador de eventos en respuesta a un clic del mouse en el botón, con valor asignado de, dentro de llaves por ser código de JS, llamar a la función para ocultar un elemento en el DOM, y dicho botón contiene texto 
            &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;show&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Cartel&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; //Dentro de llaves por ser código de JS, se valida la condición de que si "show" que es el valor actual del estado del componente tiene valor "true", mediante el operador and(&lt;span class="err"&gt;&amp;amp;&amp;amp;&lt;/span&gt;), llamar a ejecutar dicho otro componente como etiqueta de HTML para ser renderizado, de lo contrario no se hace nada
            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;addCounter&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Sumar al contador&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; //Etiqueta de botón, el cual recibe como "prop"(propiedad) siendo un atributo, el manejador de eventos en respuesta a un clic del mouse en el botón, con valor asignado de, dentro de llaves por ser código de JS, llamar a la función para modificar el valor de un estado del componente, y dicho botón contiene texto 
            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;removeCounter&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Restar al contador&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; //Etiqueta de botón, el cual recibe como "prop"(propiedad) siendo un atributo, el manejador de eventos en respuesta a un clic del mouse en el botón, con valor asignado de, dentro de llaves por ser código de JS, llamar a la función para modificar el valor de un estado del componente, y dicho botón contiene texto 
            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Elemento&lt;/span&gt; &lt;span class="na"&gt;show&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;show&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="na"&gt;counter&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;counter&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;/&amp;gt;&lt;/span&gt; //Se llama a ejecutar dicho compoente como etiqueta de HTML para ser renderizado, el cual recibe dos "props", ambas propiedades son el valor de cada uno de los estados del compoente, para poder acceder a ellos
        &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&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="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;Elemento&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="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;//Declación de función, la cual posee un argumento para reibir el objeto "props", y que ejecuta el siguiente bloque&lt;/span&gt;
    &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;useEffect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;efecto&lt;/span&gt;&lt;span class="p"&gt;,&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="nx"&gt;show&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Se llama a ejecutar la función hook para manejar efectos secundarios en componentes, la cual recibe como primer argumento, una función a ser ejecutada cada vez que haya algún cambio en el segundo parámetro, el cual es un arreglo que contiene, del objeto "props", acceder a la propiedad "show" la cual es el estado actual del componente "App"&lt;/span&gt;

    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;esMayorA5&lt;/span&gt; &lt;span class="o"&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;counter&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de variable con valor asignado de, del del objeto "props", acceder a la propiedad "counter" la cual es el estado actual del componente "App", y validar si es mayor que el valor numérico 5, así funcionando como una condicional&lt;/span&gt;

    &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;efecto&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de función, la cual será la función que manejará los efectos secundarios del componente, y que ejecuta el siguiente bloque&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Se ejecuta efecto&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;//Llamado a la consola del navegador, a la que se le aplica el método de imprimir sobre la misma, al cadena de texto enviada como argumento&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;despedida&lt;/span&gt; &lt;span class="c1"&gt;//Retorna el llamado de dicha función, la cual es un "clean up"&lt;/span&gt;
    &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;
    &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;despedida&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de función que será el "clean up" del efecto secundario del componente, y que ejecuta el siguiente bloque&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Se ejecuta despedida&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;  &lt;span class="c1"&gt;//Llamado a la consola del navegador, a la que se le aplica el método de imprimir sobre la misma, al cadena de texto enviada como argumento&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="c1"&gt;//Se retorna una estructura de JSX, el cual será el componente a ser renderizado, siendo colocado entre paréntesis&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta contenedora de bloque
            &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;La prop show vale: &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="o"&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;show&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="s2"&gt;true&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="s2"&gt;false&lt;/span&gt;&lt;span class="dl"&gt;"&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; //Etiqueta de párrafo, la cual contiene texto, y dentro de llaves por ser código de JS, una condicional de operador ternario, la cual valida, desde el objeto "props", acceder a la propiedad "show" la cual es el estado actual del componente "App", y si su valor actual es el valor booleano "true", se muestra "true", de lo contrario si es valor es el valor booleano "false", se muestra "false"
            &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;La prop counter vale: &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;counter&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;  //Etiqueta de párrafo, la cual contiene texto, y dentro de llaves por ser código de JS, del objeto "counter", acceder a la propiedad "show" la cual es el estado actual del componente "App"
            &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;esMayorA5&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&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;Y es mayor que 5&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="si"&gt;}&lt;/span&gt; //Dentro de llaves por ser código de JS, se valida la condición de que si el valor de la variable "esMayorA5" la cual es una condicional, mediante el operador and(&lt;span class="err"&gt;&amp;amp;&amp;amp;&lt;/span&gt;), renderizar la etiqueta de párrafo la cual contiene texto, de lo contrario no se hace nada
        &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&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="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;Cartel&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;//Declación de función, la cual ejecuta el siguiente bloque&lt;/span&gt;
    &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;useEffect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;efecto&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[]);&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Se llama a ejecutar la función hook para manejar efectos secundarios en componentes, la cual recibe como primer argumento, una función a ser ejecutada dependiente del segundo parámetro, el cual es un arreglo vacío, provocando que la función sea ejecutada la primera y última vez que se renderice el componente&lt;/span&gt;

    &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;efecto&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de función, la cual será la función que manejará los efectos secundarios del componente, y que ejecuta el siguiente bloque&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Primer render&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;//Llamado a la consola del navegador, a la que se le aplica el método de imprimir sobre la misma, al cadena de texto enviada como argumento&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;despedida&lt;/span&gt; &lt;span class="c1"&gt;//Retorna el llamado de dicha función, la cual es un "clean up"&lt;/span&gt;
    &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;
    &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;despedida&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de función que será el "clean up" del efecto secundario del componente, y que ejecuta el siguiente bloque&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Último render&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;//Llamado a la consola del navegador, a la que se le aplica el método de imprimir sobre la misma, al cadena de texto enviada como argumento&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="c1"&gt;//Se retorna una estructura de JSX, el cual será el componente a ser renderizado, siendo colocado entre paréntesis&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta contenedora de bloque
            &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;Soy un cartel&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; //Etiqueta de párrafo, la cual contiene texto
        &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&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="nx"&gt;Elemento&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="c1"&gt;//De dicha función componente, se accede a su propiedad estática "propTypes" que es un objeto para especificar los tipos de datos esperados de las propiedades(props) de un componente y asegurarse de que sean utilizadas correctamente, el cual es obtenido de la librería "prop-types", y se reasigna su valor para definir las validaciones de tipo para las propiedades "show" y "counter" del componente "Elemento"&lt;/span&gt;
    &lt;span class="na"&gt;show&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;bool&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;//Se establece que, la propiedad "show" debe, desde la librería "PropTypes", ser un valor booleano&lt;/span&gt;
    &lt;span class="na"&gt;counter&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;number&lt;/span&gt; &lt;span class="c1"&gt;//Se establece que, la propiedad "counter" debe, desde la librería "PropTypes", ser un valor numérico&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  EVENTOS:
&lt;/h1&gt;

&lt;p&gt;Los eventos son interacciones que suceden sobre elementos dentro del HTML, Cuando usamos Javascript en páginas de HTML, Javascript puede “reaccionar” sobre estos eventos y así poder darle algún comportamiento.&lt;/p&gt;

&lt;p&gt;Algunos de los los eventos más comunes son:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Click Events&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Form Events&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Keyboard Events&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mouse Events&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  EVENT BUBBLING:
&lt;/h3&gt;

&lt;p&gt;Este proceso inicia cuando un elemento ha ejecutado el evento y este se propaga en cadena dentro de los elementos que se contienen dentro de la jerarquía, empezando desde el elemento hijo más profundo y siendo desencadenados los eventos del mismo tipo.&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="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;html&lt;/span&gt; &lt;span class="na"&gt;lang=&lt;/span&gt;&lt;span class="s"&gt;"en"&lt;/span&gt;&lt;span class="nt"&gt;&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;meta&lt;/span&gt; &lt;span class="na"&gt;charset=&lt;/span&gt;&lt;span class="s"&gt;"UTF-8"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"viewport"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"width=device-width, initial-scale=1.0"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;Document&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;div&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"app"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;**onclick=&lt;/span&gt;&lt;span class="s"&gt;"alert('div')"&lt;/span&gt;&lt;span class="na"&gt;**&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt; &lt;span class="c"&gt;&amp;lt;!--Etiqueta contenedora de bloque, la cual posee como atributo, el manejador de eventos de click sobre el elemento, con valor de, ejecutar código de JS el cual es llamar a ejecutar la función de de ventana emergente, la cual muestra la cadena de texo enviada como argumento--&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;p&lt;/span&gt; &lt;span class="na"&gt;**onclick=&lt;/span&gt;&lt;span class="s"&gt;"alert('p')"&lt;/span&gt;&lt;span class="na"&gt;**&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt; &lt;span class="c"&gt;&amp;lt;!--Etiqueta de párrafo, la cual posee como atributo, el manejador de eventos de click sobre el elemento, con valor de, ejecutar código de JS el cual es llamar a ejecutar la función de de ventana emergente, la cual muestra la cadena de texo enviada como argumento--&amp;gt;&lt;/span&gt;
                &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;**onclick=&lt;/span&gt;&lt;span class="s"&gt;"handleClick()"&lt;/span&gt;&lt;span class="na"&gt;**&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Click me&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt; &lt;span class="c"&gt;&amp;lt;!--Etiqueta de botón, la cual posee como atributo, el manejador de eventos de click sobre el elemento, con valor de, jecutar código de JS el cual es llamar a ejecutar dicha función desde el archivo de JS--&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/div&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;"./main.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 jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;handleClick&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="c1"&gt;//Declaración de función, la cual ejecuta el siguiente bloque&lt;/span&gt;
    &lt;span class="nx"&gt;alert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;button&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;//Llamado a ejecutar la función de ventana emergente, la cual muestra la cadena de texto enviada como argumento&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;Para evitar la propagación de los eventos se utiliza la función *********************&lt;strong&gt;&lt;em&gt;stopPropagation().&lt;/em&gt;&lt;/strong&gt;*********************&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;onclick=&lt;/span&gt;&lt;span class="s"&gt;"alert('div')"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt; &lt;span class="c"&gt;&amp;lt;!--Etiqueta contenedora de bloque, posee la propiedad manejadora de eventos de hacer click sobre el elementos, con valor asignado de, dentro de comillas ejeuctar código de JS, siendo la función de ventana emergente, la cual muestra la cadena de texto enviada como argumento--&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;p&lt;/span&gt; 
    &lt;span class="na"&gt;onclick=&lt;/span&gt;&lt;span class="s"&gt;"**event.stopPropagation();** &amp;lt;!--Propiedad de manejador de eventos de click sobre el elemento, con valor de ejecutar código de JS, el cual es, al evento ejecutado el cual es el click sobre el elemento, se le aplica el método de detener la propagación del evento en la jerarquía, para solo ejecutarse en este elemento--&amp;gt;
    alert('p')"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; 
        &lt;span class="na"&gt;onclick=&lt;/span&gt;&lt;span class="s"&gt;**"handleClick(event)**"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt; &lt;span class="c"&gt;&amp;lt;!--Propiedad de manejador de eventos de click sobre el elemento, con valor de ejecutar código de JS, el cual es, el llamado a ejecutar dicha dicha función desde el archivo de JS, a la cual se el envía el evento ejecutado como argumento--&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ul&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;```jsx
function **handleClick**(**event**) { //Declaración de función, recibe como argumento el evento ejecutado, la cual ejecuta el siguiente bloque
    **event.stopPropagation();** //A dicho evento ejecutado, se le aplica el método de detener la propagación del mismo en la jerarquía, para solo ejecutarse en este elemento
    alert("button"); //Llamado a ejecutar la función de ventana emergente, la cual muestra la cadena de texto enviada como argumento
}
```
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  SYNTHETIC EVENT:
&lt;/h3&gt;

&lt;p&gt;Ya que cada navegador tiene un comportamiento distinto de como funcionan lo eventos, a pesar de que dichos eventos sean muy similares algunos navegadores poseen propiedades que otros no, esto genera mucha inconsistencia, teniendo que crear una lógica para cada uno de los navegadores.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Es una implementación ***************************&lt;strong&gt;&lt;em&gt;cross-browser&lt;/em&gt;&lt;/strong&gt;*************************** por arriba de los eventos nativos del navegador.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Normaliza los eventos para que las propiedades de los eventos sean consistentes en en diferentes navegadores.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Dentro de dicha funcionalidad hay distintos tipos de atributos que vienen incluidos dentro de éste evento sintético, pero sin contener todas las propiedades de un evento nativo dentro del navegador, para ello se puede utiliza el atributo: &lt;strong&gt;DOMEvent nativeEvent&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NOMALIZACIÓN:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Para normalizar se utiliza siempre *******&lt;strong&gt;&lt;em&gt;lower camelCase&lt;/em&gt;&lt;/strong&gt;*******, lo cual es que la primer palabra se coloca en minúsculas y las siguientes palabras comenzarán en mayúsculas.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Para acceder a un evento en react, se hace directo en la etiqueta HTML de JSX con los atributos de manejadores de eventos, los cuales utilizan la sintaxis *******&lt;strong&gt;&lt;em&gt;lower camelCase&lt;/em&gt;&lt;/strong&gt;*******.&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;//JS&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;handleClick&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de función, la cual ejecuta el siguiente bloque&lt;/span&gt;
    &lt;span class="nx"&gt;alert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;button&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;//Llamado a ejecutar la función de ventana emergente, la cual muestra la cadena de texto enviada como argumento&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;//React&lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="err"&gt;**&lt;/span&gt;&lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="err"&gt;**&lt;/span&gt;&lt;span class="s"&gt;"handleClick**"&lt;/span&gt;&lt;span class="err"&gt;**&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Click me&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;span class="c1"&gt;//Etiqueta HTML JSX de botón, el cual posee como atributo el evento sentético de click sobre el elemento, con valor de llamar a dicha función anterior &lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  FORMULARIOS:
&lt;/h1&gt;

&lt;p&gt;Los formularios en HTML tienen comportamientos por defecto en los navegadores y en muchos casos se requiere evitar dichos comportamientos por defecto para crear una propia funcionalidad de manera manual.&lt;/p&gt;

&lt;p&gt;Para prevenir los comportamientos por defecto al enviar los formularios:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Al evento ***********&lt;strong&gt;&lt;em&gt;onsubmit&lt;/em&gt;&lt;/strong&gt;*********** del formulario *************************&lt;strong&gt;&lt;em&gt;se le aplica el método *&lt;/em&gt;&lt;/strong&gt;*&lt;strong&gt;&lt;em&gt;preventDefault()&lt;/em&gt;&lt;/strong&gt;*****.&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;form&lt;/span&gt; &lt;span class="na"&gt;action=&lt;/span&gt;&lt;span class="s"&gt;""&lt;/span&gt; &lt;span class="na"&gt;method=&lt;/span&gt;&lt;span class="s"&gt;"post"&lt;/span&gt; &lt;span class="na"&gt;**onsubmit=&lt;/span&gt;&lt;span class="s"&gt;"event.preventDefault()**"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt; &lt;span class="c"&gt;&amp;lt;!--Eiqueta de formulario, la cual posee los atributos de "acción" para la petición a la ruta web, el de "método" con valor para "publicar", y el manejador de eventos de "entregar" los datos del formulario con valor de código de JS de hacer referencia al evento ejecutado, y aplicar el método para prevenir el comportamiento por defecto de dicho evento de "entregar"--&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&amp;gt;&lt;/span&gt; &lt;span class="c"&gt;&amp;lt;!--Etiqueta contenedora de bloque,--&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;label&lt;/span&gt; &lt;span class="na"&gt;for=&lt;/span&gt;&lt;span class="s"&gt;"name"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Name&lt;span class="nt"&gt;&amp;lt;/label&amp;gt;&lt;/span&gt; &lt;span class="c"&gt;&amp;lt;!--Etiqueta para etiquetar elementos de interfaz de usuario, posee el atributo "for" para enlazarla con el elemento correspondiente con valor de una cadena de texto la cual es la misma que el identificador del elemento a ser enlazado, y contiene texto--&amp;gt;&lt;/span&gt;
        &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;name=&lt;/span&gt;&lt;span class="s"&gt;"name"&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"name"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt; &lt;span class="c"&gt;&amp;lt;!--Etiqueta de ingreso de datos, posee los atributo de "tipo" con valor para ser de texto, el de "nombre" que es el nombre del control, el cual es enviado con los datos del formulario, y un selector "identificador" el cual lo enlazará con el label correspondiente--&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&amp;gt;&lt;/span&gt; &lt;span class="c"&gt;&amp;lt;!--Etiqueta contenedora de bloque,--&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;label&lt;/span&gt; &lt;span class="na"&gt;for=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Email&lt;span class="nt"&gt;&amp;lt;/label&amp;gt;&lt;/span&gt; &lt;span class="c"&gt;&amp;lt;!--Etiqueta para etiquetar elementos de interfaz de usuario, posee el atributo "for" para enlazarla con el elemento correspondiente con valor de una cadena de texto la cual es la misma que el identificador del elemento a ser enlazado, y contiene texto--&amp;gt;&lt;/span&gt;
        &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;"email"&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt; &lt;span class="c"&gt;&amp;lt;!--Etiqueta de ingreso de datos, posee los atributo de "tipo" con valor para ser de email, el de "nombre" que es el nombre del control, el cual es enviado con los datos del formulario, y un selector "identificador" el cual lo enlazará con el label correspondiente--&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&amp;gt;&lt;/span&gt; &lt;span class="c"&gt;&amp;lt;!--Etiqueta contenedora de bloque--&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;button&amp;gt;&lt;/span&gt;Send&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt; &lt;span class="c"&gt;&amp;lt;!--Etiqueta de botón, contiene texto--&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/form&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  CONTROLLED COMPONETS:
&lt;/h1&gt;

&lt;p&gt;Éstos componentes son aquellos que pueden mantener su propio estado y la funcionalidad es ejecutada por React. Dichos componentes son &lt;strong&gt;controlados por completo directamente por la lógica que se les aplique&lt;/strong&gt;, mediante las &lt;strong&gt;propiedades&lt;/strong&gt; enviadas al componente o la &lt;strong&gt;funcionalidad&lt;/strong&gt; de React.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Se recomienda controlar los formularios.&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="k"&gt;import&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="s2"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Se importa la función "useState", desde la librería de react&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&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="c1"&gt;//Se exporta como valor por defecto, la declaración de función que será un componente JSX&lt;/span&gt;
    &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setName&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&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;name&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de constante la cual será un estado del componente, en la cual se utiliza la sintaxis de destructuración de arreglos, siendo el primer valor, el valor actual del estado el cual empieza siendo el valor por defecto enviado a "useState", y como segundo valor la función que actualizará el estado, dicha constante tiene valor asignado de, llamar a ejecutar la función importada para el estado del componente, la cual recibe como argumento para el valor por defecto del componente, la cadena de texto "name"&lt;/span&gt;
    &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;email&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setEmail&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&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;email&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de constante la cual será un estado del componente, en la cual se utiliza la sintaxis de destructuración de arreglos, siendo el primer valor, el valor actual del estado el cual empieza siendo el valor por defecto enviado a "useState", y como segundo valor la función que actualizará el estado, dicha constante tiene valor asignado de, llamar a ejecutar la función importada para el estado del componente, la cual recibe como argumento para el valor por defecto del componente, la cadena de texto "email"&lt;/span&gt;

    &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;handleSubmit&lt;/span&gt; &lt;span class="o"&gt;=&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="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de constante con valor asignado de, una función de flecha que recibe como argumento un evento ejecutado, así conviertiendo dicha constante en una función que adopta su nombre declarado, y que ejecuta el siguiente bloque &lt;/span&gt;
        &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;preventDefault&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//A dicho evento enviado a la función, se le aplica el método para prevenir el comportamiento por defecto de dicho evento&lt;/span&gt;

        &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&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;email&lt;/span&gt; &lt;span class="o"&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="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Condicional que valida si, el valor actual del estado "name" es estrictamente igual que una cadena vacía, o si el valor actual del estado "email" es estrictamente igual que una cadena vacía, se ejecuta el siguiente bloque&lt;/span&gt;
            &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;alert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Falta algún campo&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Se ejecuta la función de ventana emergente, la cual muestra la cadena de texto envida como argumento&lt;/span&gt;
            &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//No se retorna nada para detener la ejecución&lt;/span&gt;
        &lt;span class="o"&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="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;email&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//LLamado a la consola del navegador, a la que se le aplica el método de imprimir sobre la misma, el valor actual del estado "name", y el valor actual del estado "email"&lt;/span&gt;
    &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="c1"&gt;//Se retorna dentro de paréntesis por ser un componente JSX&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta contenedora de bloque
            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;form&lt;/span&gt; &lt;span class="na"&gt;onSubmit&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;handleSubmit&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Eiqueta de formulario, la cual posee el atributo manejador de eventos de "entregar" los datos del formulario con valor de código de JS entre llaves de llamar a dicha función y ejecutarla cuando se ejecute el dicho evento
                &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta contenedora de bloque
                    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;label&lt;/span&gt; &lt;span class="na"&gt;htmlFor&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Name&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;label&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta para etiquetar elementos de interfaz de usuario, posee el atributo "htmlFor" para enlazarla con el elemento correspondiente con valor de una cadena de texto la cual es la misma que el identificador del elemento a ser enlazado, y contiene texto
                    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;input&lt;/span&gt; &lt;span class="c1"&gt;//Etiqueta de ingreso de datos, posee los siguientes atributos&lt;/span&gt;
                        &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="c1"&gt;//Atributo de "valor" con valor, dentro de llaves por ser código de JS, de el valor actual de uno de los estados del componente&lt;/span&gt;
                        &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt; &lt;span class="c1"&gt;//Atributo de "tipo" con valor, para ser de texto&lt;/span&gt;
                        &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"name"&lt;/span&gt; &lt;span class="c1"&gt;//Atributo de "nombre" con valor, que es el nombre del control el cual es enviado con los datos del formulario&lt;/span&gt;
                        &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"name"&lt;/span&gt; &lt;span class="c1"&gt;//Selector identificador el cual lo enlazará con el label correspondiente&lt;/span&gt;
                        &lt;span class="err"&gt;**&lt;/span&gt;&lt;span class="na"&gt;onChange&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&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="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;setName&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="nx"&gt;target&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="si"&gt;}&lt;/span&gt;&lt;span class="err"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//"prop"(propiedad) ****tributo manejador de eventos de "cambio de valor", con valor de ejecutar código de JS entre llaves, ejecutando una función flecha que recibe como argumento dicho evento ejecutado, la cual llama a ejecutar la función de actualización del estado la cual recibe como argumento, del evento ejecutado acceder al elemento que lo ejecutó y obtener su valor, siendo dicho valor el nuevo valor actual del compente&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;div&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;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta contenedora de bloque
                    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;label&lt;/span&gt; &lt;span class="na"&gt;htmlFor&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Email&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;label&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta para etiquetar elementos de interfaz de usuario, posee el atributo "htmlFor" para enlazarla con el elemento correspondiente con valor de una cadena de texto la cual es la misma que el identificador del elemento a ser enlazado, y contiene texto
                    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;input&lt;/span&gt; &lt;span class="c1"&gt;//Etiqueta de ingreso de datos, posee los siguientes atributos&lt;/span&gt;
                        &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;email&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="c1"&gt;//Atributo de "valor" con valor, dentro de llaves por ser código de JS, de el valor actual de uno de los estados del componente&lt;/span&gt;
                        &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt; &lt;span class="c1"&gt;//Atributo de "tipo" con valor, para ser de correo electrónico&lt;/span&gt;
                        &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt; &lt;span class="c1"&gt;//Atributo de "nombre" con valor, que es el nombre del control el cual es enviado con los datos del formulario,&lt;/span&gt;
                        &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt; &lt;span class="c1"&gt;//Selector identificador el cual lo enlazará con el label correspondiente&lt;/span&gt;
                        &lt;span class="err"&gt;**&lt;/span&gt;&lt;span class="na"&gt;onChange&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&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="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;setEmail&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="nx"&gt;target&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="si"&gt;}&lt;/span&gt;&lt;span class="err"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//"prop"(propiedad) ****tributo manejador de eventos de "cambio de valor", con valor de ejecutar código de JS entre llaves, ejecutando una función flecha que recibe como argumento dicho evento ejecutado, la cual llama a ejecutar la función de actualización del estado la cual recibe como argumento, del evento ejecutado acceder al elemento que lo ejecutó y obtener su valor, siendo dicho valor el nuevo valor actual del compente&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;div&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;div&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="err"&gt;!--&lt;/span&gt;&lt;span class="na"&gt;Etiqueta&lt;/span&gt; &lt;span class="na"&gt;contenedora&lt;/span&gt; &lt;span class="na"&gt;de&lt;/span&gt; &lt;span class="na"&gt;bloque--&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;button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Send data&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;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="err"&gt;!--&lt;/span&gt;&lt;span class="na"&gt;Etiqueta&lt;/span&gt; &lt;span class="na"&gt;de&lt;/span&gt; &lt;span class="na"&gt;bot&lt;/span&gt;&lt;span class="err"&gt;ó&lt;/span&gt;&lt;span class="na"&gt;n&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt; &lt;span class="na"&gt;contiene&lt;/span&gt; &lt;span class="na"&gt;texto--&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;div&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;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&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;
  
  
  UNCONTROLLED COMPONETS:
&lt;/h1&gt;

&lt;p&gt;Al contrario de los componentes controlados, la funcionalidad es ejecutada desde el DOM.&lt;/p&gt;

&lt;p&gt;En éstos componentes lo único que se puede hacer es obtener valores e información, &lt;strong&gt;NO&lt;/strong&gt; se puede modificar o controlar.&lt;/p&gt;

&lt;h3&gt;
  
  
  REFERENCIAS:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Permite acceder directamente al elemento HTML mediante el DOM original.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Permite acceder a los datos del elemento, mas no modificarlos.&lt;/li&gt;
&lt;li&gt;Ayuda para elementos que no pueden ser controlados directamente.&lt;/li&gt;
&lt;li&gt;Ayuda a saber si un elemento ya fue definido o si éste existe.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Para asociar la referecia con el elemento:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;En el elemento se accede a su propiedad *******&lt;strong&gt;&lt;em&gt;ref={}&lt;/em&gt;&lt;/strong&gt;*******, la cual la mayoría de los elementos HTML lo poseen.&lt;/li&gt;
&lt;li&gt;Dentro de las llaves por ser código de JS, se coloca el nombre declarado que ejecuta el hook &lt;strong&gt;useRef()&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Para acceder a la información de dichas referencias:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A la referencia declarada la cual es la que ejecuta el hook &lt;strong&gt;useRef()&lt;/strong&gt;, se accede a su propiedad ***********&lt;strong&gt;&lt;em&gt;current&lt;/em&gt;&lt;/strong&gt;***********, la cual obtiene el elemento al que se está haciendo referencia.&lt;/li&gt;
&lt;li&gt;De dicha propiedad ***********&lt;strong&gt;&lt;em&gt;current&lt;/em&gt;&lt;/strong&gt;********&lt;strong&gt;&lt;em&gt;, se accede al valor mediante *&lt;/em&gt;&lt;/strong&gt;***&lt;strong&gt;&lt;em&gt;value&lt;/em&gt;&lt;/strong&gt;*******.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Hay un solo elemento que no se puede controlar y solo se puede acceder vía referencia:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cuando ***********************************&lt;strong&gt;&lt;em&gt;se adjunta un archivo: Adjuntar.&lt;/em&gt;&lt;/strong&gt;***********************************&lt;/li&gt;
&lt;li&gt;Éste elemento *&lt;strong&gt;&lt;em&gt;NO&lt;/em&gt;&lt;/strong&gt;* posee la propiedad *******&lt;strong&gt;&lt;em&gt;value&lt;/em&gt;&lt;/strong&gt;*******.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Para acceder al archivo adjuntado:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Se accede a su propiedad ***********&lt;strong&gt;&lt;em&gt;current&lt;/em&gt;&lt;/strong&gt;***********, la cual obtiene el elemento al que se está haciendo referencia&lt;/li&gt;
&lt;li&gt;Y mediante &lt;strong&gt;files&lt;/strong&gt;, se accede a la lista de archivos adjuntados, el cual es un objeto al que se pueden acceder a su contenido mediante el índice del lo valore como en un arreglo.
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useRef&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="s2"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Se importa la función(hook) para referenciar elementos mediante el DOM, desde, la librería de React&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&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="c1"&gt;//Se exporta como valor por defecto, la declaración de función que será un componente JSX&lt;/span&gt;
    &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;inputNameRef&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;useRef&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de variable con valor asignado de, llamar a ejecutar el hook para referenciar y acceder a un elemento del DOM&lt;/span&gt;
    &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;inputEmailRef&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;useRef&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de variable con valor asignado de, llamar a ejecutar el hook para referenciar y acceder a un elemento del DOM&lt;/span&gt;
    &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;attachedFile&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;useRef&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de variable con valor asignado de, llamar a ejecutar el hook para referenciar y acceder a un elemento del DOM&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;handleSubmit&lt;/span&gt; &lt;span class="o"&gt;=&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="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de constante con valor asignado de, una función flecha, convirtiédola en una función, la cual recibe como argumento la referencia del evento eejcutado, la cual ejecuta el siguiente bloque&lt;/span&gt;
        &lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;preventDefault&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;//A dicho evento ejecutado, se le aplica el método para prevenir su comportamiento por defecto, y asignale uno&lt;/span&gt;

        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="c1"&gt;//A la consola del navegador, se le aplica el método de imprimir sobre la misma lo siguiente&lt;/span&gt;
            &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;inputNameRef&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;current&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="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//A dicho elemento referenciado desde el DOM, se accede al elemento, y a su valor&lt;/span&gt;
            &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;inputEmailRef&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;current&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//A dicho elemento referenciado desde el DOM, se accede al elemento, y a su valor&lt;/span&gt;
        &lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;attachedFile&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;current&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;files&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;name&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;//A la consola del navegador, a la que se le aplica el método de imprimir sobre la misma, de dicho elemento referenciado desde el DOM, se accede al elemento, a la lista(objeto) del "archivos", se accede al primer elemento mediante su índice, y se accede a su propiedad de "nombre"&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="c1"&gt;//Se retorna dentro de paréntesis por ser un componente JSX&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta contenedora de bloque
            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;form&lt;/span&gt; &lt;span class="na"&gt;onSubmit&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;handleSubmit&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta de formulario, posee el atributo manejador de eventos del evento de entregar los datos del formualrio, con valor dentro de llaves por ser código de JS, de llamar a dicha constante función apra ser ejecutada al momento de detectar la ejecución de dicho evento
                &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta contenedora de bloque
                    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;label&lt;/span&gt; &lt;span class="na"&gt;htmlFor&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Name&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;label&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta para etiquetar elementos de interfaz de usuario, posee el atributo "htmlFor" para enlazarla con el elemento correspondiente con valor de una cadena de texto la cual es la misma que el identificador del elemento a ser enlazado, y contiene texto
                    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;input&lt;/span&gt; &lt;span class="c1"&gt;//Etiqueta de ingreso de datos, posee los siguientes atributos&lt;/span&gt;
                        &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt; &lt;span class="c1"&gt;//Atributo de "tipo" con valor, para ser de texto&lt;/span&gt;
                        &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"name"&lt;/span&gt; &lt;span class="c1"&gt;//Atributo de "nombre" con valor, que es el nombre del control el cual es enviado con los datos del formulario&lt;/span&gt;
                        &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"name"&lt;/span&gt; &lt;span class="c1"&gt;//Selector identificador el cual lo enlazará con el label correspondiente&lt;/span&gt;
                        &lt;span class="err"&gt;**&lt;/span&gt;&lt;span class="na"&gt;ref&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;inputNameRef&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="err"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad de "referencia" para vincular el hook para acceder al elemento que posee ésta propiedad, con valor de, en código de JS dentro de llaves, dicha constante, la cual será éste elemento&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;div&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;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta contenedora de bloque
                    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;label&lt;/span&gt; &lt;span class="na"&gt;htmlFor&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Email&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;label&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta para etiquetar elementos de interfaz de usuario, posee el atributo "htmlFor" para enlazarla con el elemento correspondiente con valor de una cadena de texto la cual es la misma que el identificador del elemento a ser enlazado, y contiene texto
                    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;input&lt;/span&gt; &lt;span class="c1"&gt;//Etiqueta de ingreso de datos, posee los siguientes atributos&lt;/span&gt;
                        &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt; &lt;span class="c1"&gt;//Atributo de "tipo" con valor, para ser de correo electrónico&lt;/span&gt;
                        &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt; &lt;span class="c1"&gt;//Atributo de "nombre" con valor, que es el nombre del control el cual es enviado con los datos del formulario&lt;/span&gt;
                        &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt; &lt;span class="c1"&gt;//Selector identificador el cual lo enlazará con el label correspondiente&lt;/span&gt;
                        &lt;span class="err"&gt;**&lt;/span&gt;&lt;span class="na"&gt;ref&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;inputEmailRef&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="err"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad de "referencia" para vincular el hook para acceder al elemento que posee ésta propiedad, con valor de, en código de JS dentro de llaves, dicha constante, la cual será éste elemento&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;div&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;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta contenedora de bloque
                    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;label&lt;/span&gt; &lt;span class="na"&gt;htmlFor&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"file"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Adjuntar&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;label&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta para etiquetar elementos de interfaz de usuario, posee el atributo "htmlFor" para enlazarla con el elemento correspondiente con valor de una cadena de texto la cual es la misma que el identificador del elemento a ser enlazado, y contiene texto
                    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;input&lt;/span&gt; &lt;span class="c1"&gt;//Etiqueta de ingreso de datos, posee los siguientes atributos&lt;/span&gt;
                        &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"file"&lt;/span&gt; &lt;span class="c1"&gt;//Atributo de "tipo" con valor, para ser de carga de archivos&lt;/span&gt;
                        &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"file"&lt;/span&gt; &lt;span class="c1"&gt;//Atributo de "nombre" con valor, que es el nombre del control el cual es enviado con los datos del formulario&lt;/span&gt;
                        &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"file"&lt;/span&gt; &lt;span class="c1"&gt;//Selector identificador el cual lo enlazará con el label correspondiente&lt;/span&gt;
                        &lt;span class="err"&gt;**&lt;/span&gt;&lt;span class="na"&gt;ref&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;attachedFile&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="err"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad de "referencia" para vincular el hook para acceder al elemento que posee ésta propiedad, con valor de, en código de JS dentro de llaves, dicha constante, la cual será éste elemento&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;div&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;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta contenedora de bloque
                    &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;Send data&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;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="err"&gt;!--&lt;/span&gt;&lt;span class="na"&gt;Etiqueta&lt;/span&gt; &lt;span class="na"&gt;de&lt;/span&gt; &lt;span class="na"&gt;bot&lt;/span&gt;&lt;span class="err"&gt;ó&lt;/span&gt;&lt;span class="na"&gt;n&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt; &lt;span class="na"&gt;contiene&lt;/span&gt; &lt;span class="na"&gt;texto--&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;div&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;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&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;
  
  
  REFERENCIAS:
&lt;/h1&gt;

&lt;p&gt;Las referencias o mejor conocidas dentro de React como &lt;strong&gt;Refs&lt;/strong&gt;, nos permiten acceder a propiedades del elemento dentro del DOM directamente.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No usar Ref:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Para simular comportamientos de componentes controlados (anti-patterns).&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Usar Ref:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Solo usamos refs cuando necesitemos implicitamente llamar a un comportamiento que React no nos permita controlar.&lt;/li&gt;
&lt;li&gt;Integrar con librerías de terceros.&lt;/li&gt;
&lt;li&gt;Gestionar focus, text selection, etc.&lt;/li&gt;
&lt;li&gt;Detectar si el elemento existe o no.&lt;/li&gt;
&lt;li&gt;Cuando haya necesidad de acceder a un elemento del DOM.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;&lt;strong&gt;Para acceder a las referencias:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;se utiliza el hook *****&lt;strong&gt;&lt;em&gt;useRef()&lt;/em&gt;&lt;/strong&gt;**&lt;em&gt;**, la cual debe ser asignada a una variable, y dicha variable debe ser enlazada a un elemento de etiqueta HTML JSX mediante la propiedad de "&lt;/em&gt;&lt;em&gt;ref={}&lt;/em&gt;*":
&lt;/li&gt;
&lt;/ul&gt;

&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useEffect&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;useRef&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="s2"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Se importan la funciónes(hooks) para  referenciar elementos mediante el DOM, desde, la librería de React&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;DemoFocus&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;//Se exporta como valor por defecto, la declaración de fucnión que será un componente JSX, la cual eecuta el siguiente bloque&lt;/span&gt;
    &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;inputRef&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;useRef&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de variable con valor asignado de, llamar a ejecutar el hook para referenciar y acceder a un elemento del DOM&lt;/span&gt;

    &lt;span class="nx"&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="c1"&gt;//Se llama a ejecutar la función para manejar los efectos secundarios del componente, la cual recibe como primer argumento una función flecha, la cual ejecuta el siguiente bloque &lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Mounted&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 la consola del navegador, se le aplica el método de imprimir sobre la misma, la cadena de texto envida como argumento&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;inputRef&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;//A la consola del navegador, se le aplica el método de imprimir sobre la misma, el valor de dicha referencia, el cual es el elemento del DOM, que en su propiedad "ref" tenga asignado dicha referencia&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;inputRef&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;current&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="c1"&gt;//Condicional que valida que, si, de dicho elemento referenciado desde el DOM, se accede al elemento, para validar si existe al obtener valor "true", ejecutando el siguiente bloque si se cumple dicha condición&lt;/span&gt;
            &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;inputRef&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;current&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;focus&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="c1"&gt;//A dicho elemento referenciado desde el DOM, se accede al elemento, y se aplica el método para hacer focus sobre el mismo&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="c1"&gt;//Como segundo argumento, recibe un arreglo vacío, así ejecutando  el efecto la primera y última vez que se renderice el componente&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="c1"&gt;//Se retorna dentro de paréntesis por ser un componente JSX&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;input&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt; &lt;span class="err"&gt;**&lt;/span&gt;&lt;span class="na"&gt;ref&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;inputRef&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="err"&gt;**&lt;/span&gt;&lt;span class="p"&gt;/&amp;gt;&lt;/span&gt; &lt;span class="c1"&gt;//Etiqueta de ingreso de datos, posee el atributo de "tipo" con valor para ser de texto, y la propiedad de "referencia" para vincular el hook para acceder al elemento que posee ésta propiedad, con valor de, en código de JS dentro de llaves, dicha constante la cual será éste elemento&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="nx"&gt;DemoFocusDos&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;//Se exporta ladeclaraciónde función que será un compente, la cual ejecuta el siguiente bloque&lt;/span&gt;
    &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;inputRef&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;useRef&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de variable con valor asignado de, llamar a ejecutar el hook para referenciar y acceder a un elemento del DOM&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;handleClick&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="c1"&gt;//Declaración de constante con valor asignado de, una función flecha, convirtiédola en una función, la cual ejecuta el siguiente bloque&lt;/span&gt;
        &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;inputRef&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;current&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;focus&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="c1"&gt;//A dicho elemento referenciado desde el DOM, se accede al elemento, y se aplica el método para hacer focus sobre el mismo&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;inputRef&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;current&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;//LLamado a la consola del navegador, a la que se le aplica el método para imprimir sobre la misma, a dicho elemento referenciado desde el DOM, se accede al elemento, y a su valor&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="c1"&gt;//Se retorna dentro de paréntesis por ser un componente JSX&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&amp;gt;&lt;/span&gt; //Fragmento de React para contener el componente sin ser renderizado dentro de otro elemento
            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;input&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt; &lt;span class="err"&gt;**&lt;/span&gt;&lt;span class="na"&gt;ref&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;inputRef&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="err"&gt;**&lt;/span&gt;&lt;span class="p"&gt;/&amp;gt;&lt;/span&gt; //Etiqueta de ingreso de datos, posee el atributo de "tipo" con valor para ser de texto, y la propiedad de "referencia" para vincular el hook para acceder al elemento que posee ésta propiedad, con valor de, en código de JS dentro de llaves, dicha constante la cual será éste elemento
            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="na"&gt;onClick&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;handleClick&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Focus&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; //Etiqueta de botón, posee la propiedad manejadora de eventos para el evento de click sobre el mismo, con valor dentro de llaves por ser código de JS, de llamar a dicha constante función para ser ejecutada cuado se ejecute dicho evento, y la cual contiene texto
        &lt;span class="p"&gt;&amp;lt;/&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;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;forwardRef():&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Esta función es necesaria para poder crear un componente funcional que soporte el uso de referencias (refs).&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Esta técnica la vamos a utilizar cuando nos veamos en la necesidad de aislar funcionalidad.&lt;/p&gt;

&lt;p&gt;Esto significa que nos permitirá no perder la referencia del elemento aunque este en otro componente.&lt;/p&gt;

&lt;p&gt;Es una forma en la cual no se pierde la referencia que se tiene desde dentro para utilizarla desde fuera, *****************&lt;strong&gt;&lt;em&gt;solamente como referencia del elemento que se está seleccionado&lt;/em&gt;&lt;/strong&gt;*****************, no del componente.&lt;/p&gt;

&lt;p&gt;En resumen, ayuda a no perder la referencia del elemento que esté en otro componente y así mismo poderlo reutilizar en alguna otra parte del código.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Para implementarlo:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Se debe importar la función &lt;strong&gt;forwardRef&lt;/strong&gt; desde la librería de React. Dicha función ayuda a contener un componente y le agrega propiedades para poder tener acceso a esa información.&lt;/li&gt;
&lt;li&gt;Al llamar a ejecutar la función &lt;strong&gt;forwardRef()&lt;/strong&gt;, se le envía un componente como argumento, así se le indica que se le hace una devolución de la referencia hacia el componente padre que lo esté llamando.&lt;/li&gt;
&lt;li&gt;Al componente que será enviado como argumento a la función &lt;strong&gt;forwardRef()&lt;/strong&gt;, a demás de poseer el parámetro para recibir las “*****&lt;strong&gt;&lt;em&gt;props&lt;/em&gt;&lt;/strong&gt;**&lt;strong&gt;&lt;em&gt;”, posee el parámetro *&lt;/em&gt;&lt;/strong&gt;*&lt;strong&gt;&lt;em&gt;ref&lt;/em&gt;&lt;/strong&gt;***** para recibir una &lt;strong&gt;referencia&lt;/strong&gt; la cual será la referencia que se obtiene desde la función &lt;strong&gt;forwardRef()&lt;/strong&gt; la cual es la que se va a asociar a la referencia que se está aplicando desde afuera.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Para obtener la referencia de un elemento dentro de un componente:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Al llamar a ejecutar el componente como etiqueta de HTML JSX, se le coloca la propiedad *********************&lt;strong&gt;&lt;em&gt;ref={}&lt;/em&gt;&lt;/strong&gt;********************* a la cual se le asigna como valor dentro de llaves por ser código de JS, la variable/constante que utiliza el hook *****&lt;strong&gt;&lt;em&gt;useRef()&lt;/em&gt;&lt;/strong&gt;*****.&lt;/li&gt;
&lt;li&gt;Así se le agrega la propiedad *********&lt;strong&gt;&lt;em&gt;ref={}&lt;/em&gt;&lt;/strong&gt;********* al componente, la cual hará referencia al elemento contenido dentro del componente que posea la propiedad *********&lt;strong&gt;&lt;em&gt;ref={}&lt;/em&gt;&lt;/strong&gt;********* la cual tiene el valor que se envíe al parámetro ***&lt;strong&gt;&lt;em&gt;ref&lt;/em&gt;&lt;/strong&gt;*** del componente que posee dicho elemento contenido.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;//InputForward.jsx&lt;/span&gt;

&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;forwardRef&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="s2"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Se importa la función "forwardRef", desde, la librería de React, para poder crear un componente funcional que soporte el uso de referencias (refs)&lt;/span&gt;

&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;InputForward&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="nx"&gt;ref&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de función, la cual posee el parámetro para recibir el objeto de propiedades(props), y el parámetro para recibir la referencia que se utilizará para acceder al elemento interno del componente, en este caso, el input&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="c1"&gt;//Se retorna dentro de paréntesis por ser un componente JSX&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&amp;gt;&lt;/span&gt; //Fragmento de React para contener el componente sin ser renderizado dentro de otro elemento
            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;label&lt;/span&gt; &lt;span class="na"&gt;htmlFor&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"input"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&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;label&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;label&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta para etiquetar elementos de interfaz de usuario, posee el atributo "htmlFor" para enlazarla con el elemento correspondiente con valor de una cadena de texto la cual es la misma que el identificador del elemento a ser enlazado, y contiene dentro de llaves por ser código de JS, del objeto de "props" enviado al componente, acceder a la propiedad label el cual será un elemento label
            **&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;input&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt; &lt;span class="na"&gt;ref&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;ref&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"input"&lt;/span&gt;&lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;** //Etiqueta de entrada de datos, la cual posee la propiedad de "tipo" con valor para ser de texto, y la propiedad de "referencia" con valor dentro de llaves por ser código de JS, de la referencia pasada al parámetro del componente, esto permitirá que la referencia se enlace al elemento input interno del componente, y un selector identificaor para enlazarlo con su respectivo label
        &lt;span class="p"&gt;&amp;lt;/&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="o"&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;forwardRef&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;InputForward&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Se exporta como valor por defecto, llamar a ejecutar la función "forwardRef", la cual recibe como argumento, el componente InputForward, esto permite que el componente pueda ser utilizado por un componente padre que necesita acceder al elemento input interno utilizando una referencia&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;//App.jsx&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useEffect&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;useRef&lt;/span&gt;&lt;span class="o"&gt;**&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="s2"&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;//Se importan los hooks useEffect y useRef de la librería de React, el hook useRef se utilizará para crear una referencia que apuntará al input interno del componente "ForwardRef"&lt;/span&gt;
&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;ForwardRef&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./components/inputForward&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Se importa el componente "**ForwardRef**", desde, su ruta de archivo&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&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="c1"&gt;//Se exporta como valor por defecto, la declaración de función que será un componente, y que ejecuta el siguiente bloque&lt;/span&gt;
    &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;inputRef&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;useRef&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de constante con valor asignado de, llamar a ejecutar el hook para referenciar y acceder a un elemento del DOM, el cual es el input interno del componente "ForwardRef"&lt;/span&gt;

    &lt;span class="nx"&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="c1"&gt;//Se llama a ejecutar la función para manejar los efectos secundarios del componente, la cual recibe como primer argumento una función flecha, la cual ejecuta el siguiente bloque&lt;/span&gt;
        &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;ref input&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;inputRef&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//LLamado a la consola del navegador, a la que se le aplica el método para imprimir sobre la misma, la cadena de texto, y el valor de dicha constante, el cual es el elemento contenido dentro del componente **ForwardRef** al que se le hace referencia&lt;/span&gt;
        &lt;span class="nx"&gt;handleFocusForward&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;//Se llama a ejecutar dicha constante función&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;[])&lt;/span&gt; &lt;span class="c1"&gt;//Como segundo argumento, recibe un arreglo vacío, así ejecutando  el efecto la primera y última vez que se renderice el componente&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;handleFocusForward&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="c1"&gt;//Declaración de función con valor asignado de, una función de flecha, así convirtiéndola en una función, y que ejecuta el siguiente bloque&lt;/span&gt;
        &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;inputRef&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;current&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;focus&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//De dicha referencia que es el elementos, se accede al elemento mismo, y se le aplica el método para hacer "enfoque" sobre el mismo, para eso se utilizó la referencia&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="c1"&gt;//Se retorna dentro de paréntesis por ser un componente JSX&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta contenedora de bloque
            **&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;ForwardRef&lt;/span&gt; &lt;span class="na"&gt;ref&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;inputRef&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="na"&gt;label&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"Nombre"&lt;/span&gt;&lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;** //Se llama a ejecutar dicho componete como etiqieta HTML JSX, la cual posee la propiedad de "referencia" la cual fue dada mediante la función **forwardRef** y que tiene valor asignado de, vincular la referencia inputRef para acceder al elemento contenido dentro de éste componente, al que se quiere acceder y que también tiene la propiedad ref, siendo así que la constante **inputRef** es la referencia del elemento input contenido dentro del componente, y también se le pasa una propiedad "label" con el valor "Nombre", así se vincula con la referencia "inputRef" para que el componente padre ("App") pueda acceder a él.
        &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&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;h2&gt;
  
  
  useImperativeHandle():
&lt;/h2&gt;

&lt;p&gt;Al igual que el ref, este hook nos permitirá de igual forma pasar la referencia de un elemento para poder utilizarla dentro de un componente, a diferencia de utilizar directamente el ref que se asoció a un elemento, la referencia es asociada a &lt;strong&gt;useImperativeHandle()&lt;/strong&gt; para indicar que nosotros vamos a personalizar los datos o atributos que se retornan a esta referencia.&lt;/p&gt;

&lt;p&gt;Sin embargo, además nos permitirá personalizar lo que se regresa en la referencia, ya sea para devolver algún dato/función que nos permita cambiar su comportamiento.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Para implementarlo:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Se debe importar la función &lt;strong&gt;useImperativeHandle&lt;/strong&gt; desde la librería de React.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Al llamar a ejecutar la función &lt;strong&gt;forwardRef()&lt;/strong&gt;, posee:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Como primer parámetro para recibir el argumento que será una referencia de un elemento la cual es la que va a llegar desde donde se quiere obtener.&lt;/li&gt;
&lt;li&gt;Como segundo parámetro, una función flecha callback la cual va a retornar lo que se requiera.
&lt;/li&gt;
&lt;/ul&gt;

&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;//Slider.jsx&lt;/span&gt;

&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;forwardRef&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;useImperativeHandle&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="s2"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//Se importan las funciones "forwardRef" para pasar "refs" de un componente secundario al componente padre, y "useImperativeHandle" que permite exponer funciones específicas del componente hijo a través del "ref" del componente padre&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;useKeenSlider&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="s2"&gt;keen-slider/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;//Se importa el hook "useKeenSlider" desde, librería "keen-slider" para react, que permite inicializar y utilizar el slider&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;keen-slider/keen-slider.min.css&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//Se importa un archivo de CSS, desde su ruta&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Slider&lt;/span&gt; &lt;span class="o"&gt;=&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="nx"&gt;ref&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="c1"&gt;//Declaración de constante que será un compoente JSX, con valor asignado de una función flecha, la cual posee como primer parámetro para recibir como argumento el objeto "props", y como segundo parámetro para recibir como argumento una "referencia" para poder ser usada en un componente padre&lt;/span&gt;
    &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;sliderRef&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;intanceRef&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;useKeenSlider&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="c1"&gt;//Declaración de constante con sintaxis de destructuración de arreglos, siendo el primer valor una referencia que debe adjuntarse al contenedor del slider (div.keen-slider en este caso) para que funcione correctamente, y el segundo valor una referencia al objeto de instancia del slider que representa el objeto de instancia del slider que contiene varios métodos y propiedades útiles para controlar y gestionar el slider los cuales son métodos como "next" y "prev" para controlar la navegación del slider, y tiene valor asignado de, llamar a ejecutar dicho hook para acceder a dichos valores destructurados&lt;/span&gt;

    &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;useImperativeHandle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ref&lt;/span&gt;&lt;span class="p"&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="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Se llama a ejecutar el hook que permite exponer funciones específicas del componente hijo a través del "ref" del componente padre, la cual recibe como primer argumento es la "ref" que se pasa al componente hijo (en este caso, al componente Slider), y como segundo argumento reibe una función de flecha que debe devolver un objeto para personalizar lo que se retornará a dicha referencia, y que ejecuta el siguiente bloque&lt;/span&gt;
        &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Se retorna un objeto con las siguientes propiedades&lt;/span&gt;
            &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="na"&gt;next&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;intanceRef&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;current&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;next&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad del objeto, con valor de, de dicho objeto que posee propiedades para controlar y gestionar el slider, con "current" se accede al dicho objeto, para poder acceder a su método para avanzar al siguiente slide en el slider&lt;/span&gt;
            &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="na"&gt;prev&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;intanceRef&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;current&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;prev&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad del objeto, con valor de, de dicho objeto que posee propiedades para controlar y gestionar el slider, con "current" se accede al dicho objeto, para poder acceder a su método para retroceder al anterior slide en el slider&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="o"&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="c1"&gt;//Se retorna dentro de paréntesis por ser un componente JSX&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&amp;gt;&lt;/span&gt; //Fragmento de React para contener el componente sin ser renderizado dentro de otro elemento
            **&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&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;"keen-slider"&lt;/span&gt; &lt;span class="na"&gt;ref&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;sliderRef&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="err"&gt;**&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta contenedora de bloque, la cual posee un selector de clase con valor de "keen-slider", y posee el atributo de referencia que se obtuvo a partir del hook "useKeenSlider" para asegurar que el slider pueda funcionar correctamente al vincular la referencia con el contenedor del slider.
                &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&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;"keen-slider__slide"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;1&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta contenedora de bloque, la cual posee un selector de clase con valor de "keen-slider__slide" y contiene texto
                &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&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;"keen-slider__slide"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;2&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta contenedora de bloque, la cual posee un selector de clase con valor de "keen-slider__slide" y contiene texto
                &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&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;"keen-slider__slide"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;3&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta contenedora de bloque, la cual posee un selector de clase con valor de "keen-slider__slide" y contiene texto
            &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;/&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="o"&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;forwardRef&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Slider&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="c1"&gt;//Se exporta como valor por defecto, el componente "Slider" utilizando "forwardRef", lo que permite que el componente padre pueda acceder a las funciones next y prev proporcionadas por el ref de este componente.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;
&lt;/ul&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;```jsx
//App.jsx

**import { useEffect, useRef } from "react"**; //Se importan los hooks useEffect y useRef de la librería de React, el hook "useEffect" maneja los efectos secundarios de un componente, y le hook "useRef" se utilizará para crear una referencia que apuntará al input interno del componente "ForwardRef"
**import Slider from "./components/Slider"**; //Se importa como valor por defecto, dicho componente, desde, su ruta

export default function App() { //Se exporta como valor por defecto, la declaración de función que será un componente, y que ejecuta el siguiente bloque
    **const sliderRef = useRef()**; //Declaración de constante con valor asignado de, llamar a ejecutar el hook para referenciar y acceder a un elemento del DOM, el cual será el que en su atributo "ref" tenga ésta refencia asignada, para acceder a la instancia del componente "Slider"

    useEffect(() =&amp;gt; { //Se llama a ejecutar la función para manejar los efectos secundarios del componente, la cual recibe como primer argumento una función flecha, la cual ejecuta el siguiente bloque
        **console.log("ref input", sliderRef)**; //A la consola del navegador, se le aplica el método para imprimir sobre la misma, dicha cadena de texto, y el valor de dicha referencia, el cual es el objeto con métodos para controlar y gestionar el slider
    }, []) //Como segundo argumento, recibe un arreglo vacío, así ejecutando  el efecto la primera y última vez que se renderice el componente

    return ( //Se retorna dentro de paréntesis por ser un componente JSX
        &amp;lt;div&amp;gt; //Etiqueta contenedora de bloque
            **&amp;lt;button onClick={() =&amp;gt; sliderRef.current.prev()}&amp;gt;Prev&amp;lt;/button&amp;gt;** //Etiqueta de botón, la cual posee la propiedad manejadora de eventos del evento e click sobre éste elemento, con valor asignado dentro de llaves por ser código de JS, una función de flecha callback la cual ejecuta, de dicha referencia que es el objeto con métodos para controlar y gestionar el slider, acceder a dicho objeto, y llamar a ejecutar su propiedad método "prev()", y contiene texto
            **&amp;lt;button onClick={() =&amp;gt; sliderRef.current.next()}&amp;gt;Next&amp;lt;/button&amp;gt;** //Etiqueta de botón, la cual posee la propiedad manejadora de eventos del evento e click sobre éste elemento, con valor asignado dentro de llaves por ser código de JS, una función de flecha callback la cual ejecuta, de dicha referencia que es el objeto con métodos para controlar y gestionar el slider, acceder a dicho objeto, y llamar a ejecutar su propiedad método "next()", y contiene texto
            **&amp;lt;Slider ref={sliderRef}/&amp;gt;** //Se llama a ejecutar dicho componente para como etiquta HTML para ser renderizado, y recibe la "prop" de "referencia" con valor asignado dentro de llaves por ser código de JS, dicha referencia "sliderRef" lo que permite que el componente App acceda y controle la instancia del slider a través de la referencia, esto hace que los botones "Prev" y "Next" controlen el desplazamiento del slider
        &amp;lt;/div&amp;gt;
    );
}
```
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  LISTAS Y LLAVES:
&lt;/h1&gt;

&lt;p&gt;Las listas nos ayudan a renderizar un set de elementos con diferentes tipos de información.&lt;/p&gt;

&lt;h2&gt;
  
  
  KEYS:
&lt;/h2&gt;

&lt;p&gt;Son una forma de identificar un elemento de otro en las listas que son repetitivas.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Las llaves “*****&lt;strong&gt;&lt;em&gt;keys&lt;/em&gt;&lt;/strong&gt;*****” deben ser identificadores únicos para no causar conflictos entre elementos.
&lt;/li&gt;
&lt;/ul&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;PropTypes&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;prop-types&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//Se importa la librería PropTypes, desde, "prop-types" que se utiliza para declarar y validar los tipos de las propiedades que se pasan a los componentes&lt;/span&gt;
&lt;span class="k"&gt;import&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="s2"&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;//Se importa la función hook "useState", desde la librería de react, para agregar el estado a los componentes&lt;/span&gt;

&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de constante con valor asignado de, un arreglo, el cual contiene los siguientes objetos&lt;/span&gt;
    &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Objeto, posee las siguientes propiedades&lt;/span&gt;
        &lt;span class="o"&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="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad del objeto, con valor numérico 1&lt;/span&gt;
        &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Rodrigo&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad del objeto, con valor de una cadena de texto&lt;/span&gt;
        &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="na"&gt;question&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;¿What is React?&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad del objeto, con valor de una cadena de texto&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;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad del objeto, con valor numérico 1&lt;/span&gt;
        &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Angelica&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad del objeto, con valor de una cadena de texto&lt;/span&gt;
        &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="na"&gt;question&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;¿What is design?&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad del objeto, con valor de una cadena de texto&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="o"&gt;**&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Question&lt;/span&gt; &lt;span class="o"&gt;=&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="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;question&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="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de constante que será un componente, con valor de una función de flecha, la cual recibe como argumento la destructuración de un objeto para acceder individualmente a cada una de las propiedades evitando mutarlas las cuales serán "propiedades", conviertiendo la constante en una función, la cual ejecuta el siguiente bloqu&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="c1"&gt;//Se retorna dentro de paréntesis por ser un componente JSX&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&amp;gt;&lt;/span&gt; //Fragmento de React para contener el componente sin ser renderizado dentro de otro elemento
            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;h2&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;UserId: **&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;id&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;h2&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta de subtítulo, la cual contiene texto, y dentro de llaves por ser código de JS, el valor de dicha propiedad "id" destructurada del objeto "prop" envíado a la función componente "Question"
            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;span&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;**&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;name&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;span&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta contenedora en línea, la cual contiene dentro de llaves por ser código de JS, el valor de dicha propiedad "name" destructurada del objeto "prop" envíado a la función componente "Question"
            &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="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;question&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; //Etiqueta de párrafo, la cual contiene dentro de llaves por ser código de JS, el valor de dicha propiedad "question" destructurada del objeto "prop" envíado a la función componente "Question"
        &lt;span class="p"&gt;&amp;lt;/&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="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;List&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;//Se exporta como valor por defecto, la declaración de función que será un componente, y que ejecuta el siguiente bloque &lt;/span&gt;
    &lt;span class="o"&gt;****&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="nx"&gt;question&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setQuestion&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de constante la cual será el estado del componente, en la cual se utiliza la sintaxis de destructuración de arreglos, siendo el primer valor, el valor actual del estado el cual empieza siendo el valor por defecto enviado a "useState", y como segundo valor la función que actualizará el estado, dicha constante tiene valor asignado de, llamar a ejecutar la función importada para el estado del componente, la cual recibe como argumento para el valor por defecto del componente, el valor de dicho arreglo para poder acceder a los objetos y sus propiedades&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="c1"&gt;//Se retorna dentro de paréntesis por ser un componente JSX&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&amp;gt;&lt;/span&gt; //Fragmento de React para contener el componente sin ser renderizado dentro de otro elemento
            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;ul&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta de lista desordenada, la cual contiene dentro de llaves por ser código de JS, lo siguiente
                **&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;question&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;map&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;question&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Sobre el estado actual del componente, el cual es el arreglo "data", se aplica el método de crear un nuevo arreglo aplicando una función por cada elemento que es un objeto dentro del arreglo, el cual recibe como argumento una función de flecha que por cada elemento "question" ejecuta el sigueinte bloque&lt;/span&gt;
                    &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Question&lt;/span&gt; &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;question&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;question&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="c1"&gt;//Se llama a ejecutar dicho componente como etiqueta HTML para ser renderizado, el cual recibe como "props" un objeto utilizando el "spread operator" el cual es el objeto dentro del arreglo "data" así recibe las propiedades "id", "name", y "question" correspondientes a cada objeto dentro del arreglo "data", también posee el atributo "key" para dar una identificación única a cada elemento en la lista, con valor asignado dentro de llaves por ser código de JS, del objeto dentro del arreglo "data", acceder a su propiedad "id" siendo asignado su valor           &lt;/span&gt;
                &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;)&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;ul&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;/&amp;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;Question&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="c1"&gt;//Al componente "Question", se accede a su propiedad "propTypes" para especificar los tipos de datos esperados para las props, a la cual se le asigna como valor, un objeto con las siguientes propiedades&lt;/span&gt;
    &lt;span class="na"&gt;id&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;number&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;//Se establece que, la propiedad "id" debe, desde la librería "PropTypes", ser un valor numérico&lt;/span&gt;
    &lt;span class="na"&gt;name&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;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;//Se establece que, la propiedad "name" debe, desde la librería "PropTypes", ser un valor de cadena de texto&lt;/span&gt;
    &lt;span class="na"&gt;question&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;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;//Se establece que, la propiedad "question" debe, desde la librería "PropTypes", ser un valor de cadena de texto&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  EJEMPLO:
&lt;/h1&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="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="s2"&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;//Se importa la función hook "useState", desde la librería de react, para agregar el estado a los componentes&lt;/span&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="s2"&gt;prop-types&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//Se importa la librería PropTypes, desde, "prop-types" que se utiliza para declarar y validar los tipos de las propiedades que se pasan a los componentes&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Question&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="c1"&gt;//Se importa como valor por defecto, la declaración de constante que será un componente, con valor asignado de, una funicón de flecha que ejecuta el siguiente bloque, así la constante se convierte en una función&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setName&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;useState&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="c1"&gt;//Declaración de constante la cual será un estado del componente, en la cual se utiliza la sintaxis de destructuración de arreglos, siendo el primer valor, el valor actual del estado el cual empieza siendo el valor por defecto enviado a "useState", y como segundo valor la función que actualizará el estado, dicha constante tiene valor asignado de, llamar a ejecutar la función importada para el estado del componente, la cual recibe como argumento para el valor por defecto del componente, el valor de una cadena de texto vacía&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;question&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setQuestion&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;useState&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="c1"&gt;//Declaración de constante la cual será un estado del componente, en la cual se utiliza la sintaxis de destructuración de arreglos, siendo el primer valor, el valor actual del estado el cual empieza siendo el valor por defecto enviado a "useState", y como segundo valor la función que actualizará el estado, dicha constante tiene valor asignado de, llamar a ejecutar la función importada para el estado del componente, la cual recibe como argumento para el valor por defecto del componente, el valor de una cadena de texto vacía&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;questionsList&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;setQuestionsList&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;useState&lt;/span&gt;&lt;span class="p"&gt;([]);&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de constante la cual será un estado del componente, en la cual se utiliza la sintaxis de destructuración de arreglos, siendo el primer valor, el valor actual del estado el cual empieza siendo el valor por defecto enviado a "useState", y como segundo valor la función que actualizará el estado, dicha constante tiene valor asignado de, llamar a ejecutar la función importada para el estado del componente, la cual recibe como argumento para el valor por defecto del componente, un arreglo vacío&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;handleSubmit&lt;/span&gt; &lt;span class="o"&gt;=&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="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de constante, con valor asignado de una función de flecha la cual recibe como argumento un evento ejecutado, la cual ejecuta el siguiente bloque, así cual controlará el comportamiento al enviar los datos del formulario&lt;/span&gt;
        &lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;preventDefault&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;//A dicho evento ejecutado, se le aplica el método para prevenir su comportamiento por defecto, para controlar su comportamiento&lt;/span&gt;
        &lt;span class="nx"&gt;setQuestionsList&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;question&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;questionsList&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt; &lt;span class="c1"&gt;//Se llama a ejecutar la función de actualización del estado "questionsList" la cual es un arreglo, la cual recibe como argumento, un nuevo arreglo, el cual es una copia del arreglo "questionsList", el cual recibe un objeto que representa la "pregunta a ser renderizada" el cual posee dos propiedades cuyos valores provienen de aambos estados del componente, así cada nueva pregunta será colocada al inicio de la lista para ser renderizada al incio del componente, y como segundo elemento dentro del nuevo arreglo, se utiliza operador de propagación que toma cada elemento del arreglo "questionsList" y los incluye en el nuevo array. Esto asegura que no estamos modificando directamente el array questionsList original, así se mantendrán renderizadas las preguntas anteriores y las nuevas preguntas&lt;/span&gt;
        &lt;span class="nx"&gt;setName&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="c1"&gt;//Se llama a ejecutar la función de actualización del estado "name", la cual recibe como argumento, una cadena vacía, pará así actualizar el estado, que esta cadena vacía sea en nuevo valor actual del estado, para que así se vacie el campo del input que controla este estado&lt;/span&gt;
        &lt;span class="nx"&gt;setQuestion&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="c1"&gt;//Se llama a ejecutar la función de actualización del estado "question", la cual recibe como argumento, una cadena vacía, pará así actualizar el estado, que esta cadena vacía sea en nuevo valor actual del estado, para que así se vacie el campo del input que controla este estado&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;handleNameChange&lt;/span&gt; &lt;span class="o"&gt;=&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="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de constante, con valor asignado de una función de flecha la cual recibe como argumento un evento ejecutado, la cual ejecuta el siguiente bloque, así cual controlará el comportamiento al detectar un cambio de valor en el input "name"&lt;/span&gt;
        &lt;span class="nx"&gt;setName&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="nx"&gt;target&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="c1"&gt;//Se llama a ejecutar la función de actualización del estado "name", la cual recibe como argumento, del evento ejecutado, acceder al elemento que lo ejecutó, y acceder a su valor, para que así cada vez que se actualice el valor del input que ejecuta el evento "onChange", ese valor sea el nuevo valor actual del estado&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;handleQuestionChange&lt;/span&gt; &lt;span class="o"&gt;=&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="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de constante, con valor asignado de una función de flecha la cual recibe como argumento un evento ejecutado, la cual ejecuta el siguiente bloque, así cual controlará el comportamiento al detectar un cambio de valor en el input "question"&lt;/span&gt;
        &lt;span class="nx"&gt;setQuestion&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="nx"&gt;target&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="c1"&gt;//Se llama a ejecutar la función de actualización del estado "question", la cual recibe como argumento, del evento ejecutado, acceder al elemento que lo ejecutó, y acceder a su valor, para que así cada vez que se actualice el valor del input que ejecuta el evento "onChange", ese valor sea el nuevo valor actual del estado&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="c1"&gt;//Se retorna una estructura de JSX, el cual será el componente a ser renderizado, siendo colocado entre paréntesis&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&amp;gt;&lt;/span&gt; //Fragmento de React para contener el componente sin ser renderizado dentro de otro elemento
            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;form&lt;/span&gt; &lt;span class="na"&gt;onSubmit&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;handleSubmit&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta de formulario, la cual posee el atributo manejador de eventos del evento de "entrega" de datos del formulario, con valor asignado dentro de llaves por ser código de JS, de ejecutar dicha función para controlar el comportamiento de dicho evento
                &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta contenedora de bloque
                    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;input&lt;/span&gt; &lt;span class="c1"&gt;//Etiqueta de ingreso de datos, la cual posee las siguiente propiedades&lt;/span&gt;
                        &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad de tipo, con valor para ser de "texto"&lt;/span&gt;
                        &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"name"&lt;/span&gt; &lt;span class="c1"&gt;//Selector identificador, con valor de cadena de texto, para enlazarlo con su respectivo label&lt;/span&gt;
                        &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad de valor, con valor dentro de llaves por ser código de JS, de el valor actual de su respectivo estado&lt;/span&gt;
                        &lt;span class="na"&gt;onChange&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;handleNameChange&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad manejadora de eventos del evento de "cambio de valor" del input, con valor asignado dentro de llaves por ser código de JS, de ejecutar dicha función para controlar el comportamiento de dicho evento, cada vez que cambie el valor de éste input&lt;/span&gt;
                        &lt;span class="na"&gt;required&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad de "requerido" para que el vlaor de éste input sea obligatorio&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;label&lt;/span&gt; &lt;span class="na"&gt;htmlFor&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Name&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;label&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta para etiquetar elementos de interfaz de usuario, posee el atributo "htmlFor" para enlazarla con el elemento correspondiente con valor de una cadena de texto la cual es la misma que el identificador del elemento a ser enlazado, y contiene texto
                &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&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;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta contenedora de bloque
                    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;label&lt;/span&gt; &lt;span class="na"&gt;htmlFor&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"question"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Question&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;label&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta para etiquetar elementos de interfaz de usuario, posee el atributo "htmlFor" para enlazarla con el elemento correspondiente con valor de una cadena de texto la cual es la misma que el identificador del elemento a ser enlazado, y contiene texto
                    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;br&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt; //Etiqueta de salto de línea
                    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;input&lt;/span&gt; &lt;span class="c1"&gt;//Etiqueta de ingreso de datos, la cual posee las siguiente propiedades&lt;/span&gt;
                        &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"text"&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad de tipo, con valor para ser de "texto"&lt;/span&gt;
                        &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"question"&lt;/span&gt; &lt;span class="c1"&gt;//Selector identificador, con valor de cadena de texto, para enlazarlo con su respectivo label&lt;/span&gt;
                        &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;question&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad de valor, con valor dentro de llaves por ser código de JS, de el valor actual de su respectivo estado&lt;/span&gt;
                        &lt;span class="na"&gt;onChange&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;handleQuestionChange&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad manejadora de eventos del evento de "cambio de valor" del input, con valor asignado dentro de llaves por ser código de JS, de ejecutar dicha función para controlar el comportamiento de dicho evento, cada vez que cambie el valor de éste input&lt;/span&gt;
                        &lt;span class="na"&gt;required&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad de "requerido" para que el vlaor de éste input sea obligatorio&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;div&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;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta contenedora de bloque
                    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"submit"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Post&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; //Etiqueta de botón, posee la propiedad de "tipo" con valor para ser de "entregar" los valores del formulario, y contiene texto
                &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&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;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta contenedora de bloque
                &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;questionsList&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;map&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;q&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;index&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="c1"&gt;//Dentro de llaves por ser código de JS, al estado actual del estado "questionsList" el cual es una lista, aplicar el método para crear un nuevo arreglo aplicando una fución a cada uno de los elementos dentro del arreglo, el cual reicibe como primer arguento, la referencia a cada uno de los elementos dentro de dicho arreglo, y como segundo argumento, el indice que será de cada uno de los elementos, y por cada elemento dentro de dicho arreglo, se ejecuta el siguiente bloque&lt;/span&gt;
                    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;ListQuestions&lt;/span&gt; &lt;span class="c1"&gt;//Se llama a renderizar dicho componente, el cual posee las siguientes "props"(propiedades)&lt;/span&gt;
                        &lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad que se requiere cuando se renderiza una lista de componentes en React, ayuda a React a identificar de manera única cada elemento en la lista y mejora el rendimiento al realizar actualizaciones en la interfaz de usuario, con valor asignado dentro de llaves por ser código de JS, de el valor del índice del elemento, para que éste seá único&lt;/span&gt;
                        &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;q&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad "prop" necesaria para el componente, con valor asignado dentro de llaves por ser código de JS, del elemento dentro de arreglo, acceder a su propiedad "name" para obtener su valor&lt;/span&gt;
                        &lt;span class="na"&gt;question&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;q&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;question&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;  &lt;span class="c1"&gt;//Propiedad "prop" necesaria para el componente, con valor asignado dentro de llaves por ser código de JS, del elemento dentro de arreglo, acceder a su propiedad "question" para obtener su valor&lt;/span&gt;
                    &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span class="p"&gt;))&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;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;/&amp;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="nx"&gt;ListQuestions&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="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de función que será un componente, el cual posee un parámetro para recibir sus "props", y que ejecuta el siguiente bloque&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;  &lt;span class="c1"&gt;//Se retorna una estructura de JSX, el cual será el componente a ser renderizado, siendo colocado entre paréntesis&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta contenedora de bloque
            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;h2&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&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;name&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;h2&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;  //Etiqueta de subtítulo, la cual contiene dentro de llaves por ser código de JS, del objeto de "propiedades", acceder a su propiedad de "name" para obtener su valor
            &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="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;question&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; //Etiqueta de párrafo, la cual contiene dentro de llaves por ser código de JS, del objeto de "propiedades", acceder a su propiedad de "question" para obtener su valor
        &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&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="nx"&gt;ListQuestions&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="c1"&gt;//Al componente "ListQuestions", se accede a su propiedad "propTypes" para especificar los tipos de datos esperados para las props, a la cual se le asigna como valor, un objeto con las siguientes propiedades&lt;/span&gt;
    &lt;span class="na"&gt;name&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;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;//Se establece que, la propiedad "name" debe, desde la librería "PropTypes", ser un valor de cadena de texto&lt;/span&gt;
    &lt;span class="na"&gt;question&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;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;//Se establece que, la propiedad "question" debe, desde la librería "PropTypes", ser un valor de cadena de texto&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>react</category>
      <category>javascript</category>
      <category>webdev</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>INTRODUCCIÓN A REACT Y JSX</title>
      <dc:creator>Rodrigo Grau</dc:creator>
      <pubDate>Tue, 15 Aug 2023 00:54:08 +0000</pubDate>
      <link>https://dev.to/rogab0t/introduccion-a-react-y-jsx-59l</link>
      <guid>https://dev.to/rogab0t/introduccion-a-react-y-jsx-59l</guid>
      <description>&lt;ul&gt;
&lt;li&gt;[HISTORIA DE REACT:]&lt;/li&gt;
&lt;li&gt;[¿CÓMO IDENTIFICAR COMPONENTES?]&lt;/li&gt;
&lt;li&gt;[VIRTUAL DOM:]&lt;/li&gt;
&lt;li&gt;[SINTAXIS - JSX:]&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  HISTORIA DE REACT:
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Facebook inventó React para su uso interno en 2011 y lo convirtieron en código abierto en 2013.&lt;/li&gt;
&lt;li&gt;En 2015 React tuvo su primer versión estable, empresas como Netflix y Airbnb empezaron a usarlo.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;React es una &lt;strong&gt;biblioteca de JavaScript.&lt;/strong&gt; Una biblioteca es código que &lt;strong&gt;resuelve problemas&lt;/strong&gt; por nosotros. Las podemos agregar/modificar/eliminar en nuestro proyecto usando &lt;strong&gt;npm&lt;/strong&gt;.&lt;/p&gt;

&lt;h1&gt;
  
  
  ¿QUÉ PROBLEMAS RESUELVE REACT?
&lt;/h1&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Intermediario entre desarrolladores y el DOM:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;No tenemos la necesidad de hablar directamente con la API del DOM.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Uso de componentes:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;¿Tengo un problema complejo? Dividiéndolo se puede crear un componente con otros componentes dentro.&lt;/li&gt;
&lt;li&gt;Componentes:

&lt;ul&gt;
&lt;li&gt;Permite reutilización de código.&lt;/li&gt;
&lt;li&gt;Son independientes.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Programación declarativa:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Se le dan instrucción de *******&lt;strong&gt;&lt;em&gt;cómo&lt;/em&gt;&lt;/strong&gt;******* debe quedar.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h1&gt;
  
  
  ¿CÓMO IDENTIFICAR COMPONENTES?
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Un componente es un bloque de código que permite reutilizarlo, siendo comúnmente una función.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Para utilizar un componente, se hace mediante detección de patrones, donde dicho componente será utilizado o mostrado varias veces en distintos lugares de la página web.&lt;/p&gt;

&lt;p&gt;Esto es detectado cuando hay similitudes entre elementos, ya sea  porque se utiliza la misma estructura o la misma lógica, la cual será implementada en varios casos.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cuando se crean componentes, se busca no crear componentes de &lt;strong&gt;más ni de menos&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Al crear componentes, los cuales son funciones, éstas deben declarar su nombre con *******************&lt;strong&gt;&lt;em&gt;mayúscula.&lt;/em&gt;&lt;/strong&gt;*******************&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  VIRTUAL DOM:
&lt;/h1&gt;

&lt;p&gt;En las páginas web, tenemos que realizarle cambios al DOM. Estos cambios son muy costosos a medida que nuestro DOM se va volviendo más grande y complejo.&lt;/p&gt;

&lt;p&gt;El &lt;strong&gt;Virtual DOM&lt;/strong&gt; es una representación del DOM que se guarda en la memoria. Posibilita que React sea declarativo: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Se le dice a React en qué estado quiero que esté la página, y se hará cargo de cómo llevar al DOM a ese estado con &lt;strong&gt;la menor cantidad de cambios posibles&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Para ello, React utiliza su algoritmo “reconciliation” para hacer los cambios.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  SINTAXIS - JSX:
&lt;/h1&gt;

&lt;p&gt;JSX es “Syntactic Sugar”, lo cual es una sintaxis más amigable y fácil de comprender.&lt;/p&gt;

&lt;p&gt;La sintaxis JSX nos permite tener &lt;strong&gt;Javascript&lt;/strong&gt; y &lt;strong&gt;HTML&lt;/strong&gt; en un mismo archivo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Sólo se retorna un solo elemento&lt;/strong&gt;, siendo que si se requiere que un elemento contenga varios elementos, estos tendrán que estar contenidos dentro del único elemento retornado.&lt;/p&gt;

&lt;p&gt;Para evitar la complejidad en la creación de elementos HTML, React tiene la solución son los *************&lt;strong&gt;&lt;em&gt;&lt;/em&gt;&lt;/strong&gt;**********&lt;em&gt;**, lo cual ayuda que los componentes necesarios se contengan en un “&lt;/em&gt;&lt;em&gt;contenedor&lt;/em&gt;&lt;em&gt;”, pero cuando se inspeccione el DOM, no se encontrará dicho “&lt;/em&gt;&lt;em&gt;contenedor&lt;/em&gt;*”, así evitando agregar un nuevo nodo y aumentar la complejidad. Esto en caso de no necesitar un contenedor.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Todos los tags(etiquetas HTML) que abren deben cerrarse&lt;/strong&gt;, deben de colocarse las etiquetas de apertura*&lt;em&gt;&amp;lt;&amp;gt;&lt;/em&gt;* y cierre*&lt;em&gt;&amp;lt;/&amp;gt;&lt;/em&gt;* en todos los elementos.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;camelCase en casi todos los atributos HTML.&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Al agregar una clase a algún componente o elemento HTML, se debe de hacer mediante ***************&lt;strong&gt;&lt;em&gt;className&lt;/em&gt;&lt;/strong&gt;***************.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Para utilizar valores de variables dentro de una etiqueta de HTML, se utiliza &lt;strong&gt;llaves “{ }” donde dentro se coloca el nombre de la variable a utilizar&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Se pueden utilizar valores retornados desde funciones, para ello, se utiliza &lt;strong&gt;llaves “{ }” donde dentro se coloca el nombre de la función y se colocan paréntesis para ejecutarla.&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;//main.jsx&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;StrictMode&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="s2"&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;//Se importan mediante su nombre, el componente "modo estricto", desde, la librería de react&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;createRoot&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="s2"&gt;react-dom/client&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//Se importan mediante su nombre, la función "crear raíz", desde, la librería de react-dom&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;App&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./App&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//Se importa como valor por defecto y con un nombre cualquiera, desde, la ruta de otro módulo &lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;rootElement&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="nx"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;root&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de variable con valor asignado de, del documento HTML obtener el elemento mediante su selector identificador, el cual es enviado como parámetro en cadena de texto&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;root&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;createRoot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;rootElement&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de variable con valor asignado de, ejecutar la función importada para "crear raíz", la cual recibe como argumento el elemento anterior obtenido, así se indicará dónde serán "mostrados" los componentes&lt;/span&gt;

&lt;span class="nx"&gt;root&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;render&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="c1"&gt;//A dicho elemento que es donde serán "mostrado" los componentes, se le aplica la función de "mostrar" los componentes, la cual recibe como argumento lo siguiente&lt;/span&gt;
    &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;StrictMode&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;** //Se coloca el componente "modo estricto" para resaltar posibles problemas en la aplicación 
        **&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;App&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;** //Se llama a ejecutar dicho componente importado, el cual es el elemento "section" retornado de dicha función, y se coloca como una etiqueta de HTML ya que será un elemento del DOM
    **&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;StrictMode&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;
&lt;span class="p"&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 jsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;//App.jsx&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;Profile&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de función que será un componente, le cual ejecuta el siguiente bloque&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;img&lt;/span&gt; &lt;span class="na"&gt;src&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"../public/images/rei.webp"&lt;/span&gt; &lt;span class="na"&gt;alt&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"Rei Ayanami"&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;"image"&lt;/span&gt;&lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="o"&gt;****************&lt;/span&gt;&lt;span class="c1"&gt;//Se retorna un solo elemento, el cual es una etiqueta de imagen, la cual posee los atributos de "fuente" con valor para obtener la imagen desde su ruta, el de "alternativo" para colocar un texto alternativo en caso de que no cargue la imagen, y posee un selector de clase declarado en camel case, dicha etiqueta es cerrada con "/&amp;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="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;Gallery&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;//Se exporta como valor por defecto, una función la cual será un componente que contiene otros componentes, la cual ejecuta el siguiente bloque&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="c1"&gt;//Se retorna dentro de paréntesis el componente, el cual es&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; **//**Etiqueta de fragmento para no crear un nuevo nodo dentro del HTML pero que contiene todos los componentes siguientes
            **&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;First child&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;** //Etiqueta de título principal, la cual contiene texto
            **&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Profile&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;** //Se llama a ejecutar dicho componente, el cual es el elemento "imagen" retornado de la función, y se coloca como una etiqueta de HTML ya que será un elemento del DOM
            **&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Profile&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;** //Se llama a ejecutar dicho componente, el cual es el elemento "imagen" retornado de la función, y se coloca como una etiqueta de HTML ya que será un elemento del DOM
            **&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Profile&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;** //Se llama a ejecutar dicho componente, el cual es el elemento "imagen" retornado de la función, y se coloca como una etiqueta de HTML ya que será un elemento del DOM
        **&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="o"&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;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;//App.jsx&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;Avatar&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;//Se exporta como valor por defecto, una función la cual será un componente que contiene otros componentes, la cual ejecuta el siguiente bloque&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;avatar&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;../public/images/rei.webp&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de constante con valor asignado de, una cadena de texto la cual es la ruta para obtener una imagen&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;description&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Rei Ayanami&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de constante con valor asignado de, una cadena de texto &lt;/span&gt;
    &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de función, la cual ejecuta el siguiente bloque&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt;  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Rei&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//Se retorna una cadena de texto&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="c1"&gt;//Se retorna dentro de paréntesis el componente, el cual es&lt;/span&gt;
        &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;** //Etiquta contenedora de blque
            **&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="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;()&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;** //Etiqueta de párrafo, el cual contiene dentro de llaves el llamado a ejecutar dicha función para obtener la cadena de texto que retorna
            **&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;img&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;"avatar"&lt;/span&gt;
            &lt;span class="na"&gt;src&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;avatar&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; 
            &lt;span class="na"&gt;alt&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;description&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;** //Etiqueta de imagen la cual posee un selector de clase declarado en camelCase, y los atributos de "fuente" con valor de dicha variable, y el de "alternativo" con valor de dicha variable, ambas referencias de las variable entre llaves
            **&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="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;description&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;** //Etiqueta de párrafo, el cual contiene dentro de llaves el valor de dicha variable
        **&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  EJEMPLO:
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt; &lt;span class="c"&gt;&amp;lt;!--Etiqueta de declaración del tipo de archivo de y versión de HTML--&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;html&lt;/span&gt; &lt;span class="na"&gt;lang=&lt;/span&gt;&lt;span class="s"&gt;"es"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt; &lt;span class="c"&gt;&amp;lt;!--Etiqueta raíz contenedora de la pagina, posee el atributo de lenguaje, con el valor de inglés--&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt; &lt;span class="c"&gt;&amp;lt;!--Etiqueta de los elementos no visibles de la pagina--&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;charset=&lt;/span&gt;&lt;span class="s"&gt;"UTF-8"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt; &lt;span class="c"&gt;&amp;lt;!--Etiqueta de metadatos, posee el atributo de caracteres, con el valor de caracteres del español--&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"viewport"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"width=device-width, initial-scale=1.0"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt; &lt;span class="c"&gt;&amp;lt;!--Etiqueta de metadados, posee los atributos de nombre con el valor de la ventana del navegador, y el de contenido, con el valor para establecer el zoom inicial de la pagina con valores respecto al ancho del dispositivo y la escala inicial en 1.0--&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;I'm Fronted Dev&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt; &lt;span class="c"&gt;&amp;lt;!--Etiqueta para colocar un titulo en la pestaña del navegador, contiene texto--&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="c"&gt;&amp;lt;!--Etiqueta del cuerpo de la pagina la cual contiene todos los elementos visibles de la pagina--&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"root"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt; &lt;span class="c"&gt;&amp;lt;!--Etiqueta contenedora de bloque, la cual posee un selector identificador--&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"module"&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"./src/main.jsx"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt; &lt;span class="c"&gt;&amp;lt;!--Etiqueta de dinamismo mediante javascript, posee el atributo de tipo con valor para poder usar módulos, y el de recursos para obtener el archivo javascriptdesde su ruta--&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 jsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;//main.jsx&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;StrictMode&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="s2"&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;//Se importa mediante su nombre declarado, el componente de modo estricto, desde, la librería de react&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;createRoot&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="s2"&gt;react-dom/client&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="c1"&gt;//Se importan mediante su nombre, la función "crear raíz", desde, la librería de react-dom&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;User&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="s2"&gt;./App&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//Se importan mediante su nombre, el componente "User", desde, otro módulo mediante su ruta donde &lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;rootElement&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="nx"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;root&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de constante con valor asignado de, del documento HTML, obtener el elemento mediante su selector identificador el cual es enviado como argumento en cadena de texto&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;root&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;createRoot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;rootElement&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de variable con valor asignado de, ejecutar la función importada para "crear raíz", la cual recibe como argumento el elemento anterior obtenido, así se indicará dónde serán "mostrados" los componentes&lt;/span&gt;

&lt;span class="nx"&gt;root&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;render&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="c1"&gt;//A dicha variable anterior que es donde se mostrarán los componentes, se le aplica el método para renderizar"mostrar" componentes, la cual recibe los siguiente componentes como argumento&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;StrictMode&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;  //Se coloca el componente "modo estricto" para resaltar posibles problemas en la aplicación 
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;User&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt; //Se llama a ejecutar dicho componente importado, el cual son los elementos dentro del "Fragment" retornados de dicha función componente, y se colocan como etiquetas de HTML ya que serán elementos del DOM
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;StrictMode&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&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 jsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;//App.jsx&lt;/span&gt;

&lt;span class="k"&gt;import&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="s2"&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;//Se importa el componente de fragmentos desde, la librería de react&lt;/span&gt;

&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;styles&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de variable con valor asignado de un objeto&lt;/span&gt;
    &lt;span class="na"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;450px&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad del objeto, con valor de una cadena de texto, el cual será el alto de la imagen&lt;/span&gt;
    &lt;span class="na"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;350px&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad del objeto, con valor de una cadena de texto,el cual será el ancho de la imagen&lt;/span&gt;
    &lt;span class="na"&gt;objectFit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;cover&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad del objeto, con valor de una cadena de texto, el cual será el comportamiento de redimensión para ajustar la imagen manteniendo su relación de aspecto recortando la imagen si es neecsario&lt;/span&gt;
    &lt;span class="na"&gt;overflow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;hidden&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="c1"&gt;//Propiedad del objeto, con valor de una cadena de texto, el cual será el comportamiento de ajuste de la imagen desbordada siendo recordarta&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;user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de variable con valor asignado de un objeto&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Rei&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="c1"&gt;//Propiedad del objeto, con valor de una cadena de texto&lt;/span&gt;
    &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;First child&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="c1"&gt;//Propiedad del objeto, con valor de una cadena de texto&lt;/span&gt;
    &lt;span class="na"&gt;greeting&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;I'm very tired of my life&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;  &lt;span class="c1"&gt;//Propiedad del objeto, con valor de una cadena de texto&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;Profile&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de función que será un componente, el cual ejecuta el siguiente bloque&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;img&lt;/span&gt; &lt;span class="na"&gt;src&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"../public/images/rei.webp"&lt;/span&gt; &lt;span class="na"&gt;alt&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"Rei Ayanami"&lt;/span&gt; &lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;styles&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;/&amp;gt;;&lt;/span&gt; &lt;span class="c1"&gt;//Retorna un elemento HTML, el cual es una etiqueta HTML de imagen, la cual posee los atributos de "fuente" con valor de la ruta para obtener la imagen, el de "alternativo" con valor de un texto para cuando no sea visible la imagen, y el de "estilos" para colocar estilos en línea, con valor del valor de dicha variable, el cual es el objeto con las propiedades y valores de los estilos&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="nx"&gt;User&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;//Se exporta, la declaración de función que será un componente, el cual ejecuta el siguiente bloque&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de variable con valor asignado de, del objeto "users", obtener el valor de su propiedad "name"&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;description&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;description&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de variable con valor asignado de, del objeto "users", obtener el valor de su propiedad "description"&lt;/span&gt;
    &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;greeting&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;greeting&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//Declaración de variable con valor asignado de, del objeto "users", obtener el valor de su propiedad "greeting"&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="c1"&gt;//Se retorna un componente dentro de paréntesis&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; //Se coloca el componente de fragmentos para retornar un solo componente que contenga más componentes sin crear un nuevo nodo 
            &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;¡Hola! mi nombre es &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;name&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; //Etiqueta de título principal, la cual contiene texto y el valor dentro de llaves de dicha variable
            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Profile&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt; //Se llama a ejecutar dicho componente, la cual es una imagen
            &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;h2&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;description&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;h2&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; //Etiqueta de subtítulo, la cual contiene el valor dentro de llaves de dicha variable
            &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="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;greeting&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; //Etiqueta de párrafo, la cual contiene el valor dentro de llaves de dicha variable
        &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;



</description>
      <category>react</category>
      <category>webdev</category>
      <category>frontend</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
