<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>EMMGFX</title>
	<atom:link href="https://www.emm-gfx.net/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.emm-gfx.net/</link>
	<description>Bitácora personal, desarrollo de software y algo de diseño.</description>
	<lastBuildDate>Wed, 29 Sep 2021 10:12:57 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://www.emm-gfx.net/wp-content/uploads/2019/03/cropped-favicon-2-32x32.png</url>
	<title>EMMGFX</title>
	<link>https://www.emm-gfx.net/</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">8664292</site>	<item>
		<title>Cómo crear hooks propios en React</title>
		<link>https://www.emm-gfx.net/2021/09/como-crear-hooks-propios-en-react/</link>
					<comments>https://www.emm-gfx.net/2021/09/como-crear-hooks-propios-en-react/#respond</comments>
		
		<dc:creator><![CDATA[Josep Viciana]]></dc:creator>
		<pubDate>Mon, 27 Sep 2021 13:21:18 +0000</pubDate>
				<category><![CDATA[Frontend]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Hooks]]></category>
		<category><![CDATA[React]]></category>
		<guid isPermaLink="false">https://www.emm-gfx.net/?p=3168</guid>

					<description><![CDATA[<p>Un hook es básicamente una función, pero con muchas ventajas que aporta React. Hacer un hook propio (o custom hook) es una buena manera de externalizar partes de lógica y sobre todo, hacerla reutilizable, por eso es tan interesante que puedas hacer tus propios hooks. Vamos a hacer un hook que se encargará de detectar [&#8230;]</p>
<p>La entrada <a href="https://www.emm-gfx.net/2021/09/como-crear-hooks-propios-en-react/">Cómo crear hooks propios en React</a> se publicó primero en <a href="https://www.emm-gfx.net">EMMGFX</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Un <em>hook</em> es básicamente una función, pero con muchas ventajas que aporta React. Hacer un <em>hook</em> propio (o <em>custom hook</em>) es una buena manera de externalizar partes de lógica y sobre todo, hacerla reutilizable, por eso es tan interesante que puedas hacer tus propios <em>hooks</em>.</p>



<p>Vamos a hacer un <em>hook</em> que se encargará de detectar si el usuario tiene el modo oscuro activo.</p>



<p>Primero el componente que mostrará el resultado:</p>



<pre class="wp-block-preformatted">const App = () => {
  return (
    &lt;p>Is dark?&lt;/p>
  );
}</pre>



<p>Luego lo editaremos para que use el <em>hook</em> que creamos ya mismo.</p>



<pre class="wp-block-preformatted">const useIsDark = () => {

  // El hook mantiene un state con el valor que tendrá que devolver
  const [isDark, setIsDark] = useState(false);
  
  // Usa un useEffect para crear un listener y limpiarlo cuando sea
  // necesario.
  useEffect(() => {
    const match = window.matchMedia('(prefers-color-scheme: dark)');
    const test = e => setIsDark(e.matches);
    match.addEventListener('change', test);
    return () => match.removeListener(test);
  }, []);
  
  return isDark;
}</pre>



<p>Como se ve ahí, una parte fundamental de los <em>hooks</em> es que pueden hacer uso de herramientas de React, como <code>useEffect</code> o <code>useState</code> (de los que ya hablamos en <a href="https://www.emm-gfx.net/2021/08/hooks-para-componentes-funcionales/">su artículo</a>), y esa es la diferencia principal que hay entre una función normal y <em>hook</em>. Lo único que tenemos que tener en cuenta es que los hooks deben empezar por la palabra <code>use</code>.</p>



<p>Para poder utilizar este <em>hook</em>, sólo hay que agregar una linea al componente <code>App</code>, que quedaría así:</p>



<pre class="wp-block-preformatted">const App = () => {

  const isDark = useIsDark();
  
  return (
    &lt;p>Is dark? {isDark ? '<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f31a.png" alt="🌚" class="wp-smiley" style="height: 1em; max-height: 1em;" />' : '<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f315.png" alt="🌕" class="wp-smiley" style="height: 1em; max-height: 1em;" />'}&lt;/p>
  );
}</pre>



<p>Realmente no hay mucho más que explicar. Los <em>hooks</em> son una herramienta sencilla de crear y de utilizar, lo difícil es pensar qué <em>hooks</em> tienes que hacer.</p>



<p>Os dejo el código funcionando en Codepen:</p>


<p class='codepen'  data-height='300' data-theme-id='0' data-slug-hash='xxrQyma' data-default-tab='result' data-animations='run' data-editable='' data-embed-version='2'>
See the Pen 
   by Josep Viciana (@emmgfx)
  on CodePen.</p>




<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Foto de <strong><a href="https://www.pexels.com/es-es/@joetography-9043542?utm_content=attributionCopyText&amp;utm_medium=referral&amp;utm_source=pexels">Joetography</a></strong> en <strong><a href="https://www.pexels.com/es-es/foto/madera-sucio-industria-vintage-6524411/?utm_content=attributionCopyText&amp;utm_medium=referral&amp;utm_source=pexels">Pexels</a></strong></p>
<p>La entrada <a href="https://www.emm-gfx.net/2021/09/como-crear-hooks-propios-en-react/">Cómo crear hooks propios en React</a> se publicó primero en <a href="https://www.emm-gfx.net">EMMGFX</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.emm-gfx.net/2021/09/como-crear-hooks-propios-en-react/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">3168</post-id>	</item>
		<item>
		<title>Hooks para componentes funcionales</title>
		<link>https://www.emm-gfx.net/2021/08/hooks-para-componentes-funcionales/</link>
					<comments>https://www.emm-gfx.net/2021/08/hooks-para-componentes-funcionales/#respond</comments>
		
		<dc:creator><![CDATA[Josep Viciana]]></dc:creator>
		<pubDate>Tue, 17 Aug 2021 15:33:05 +0000</pubDate>
				<category><![CDATA[Frontend]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Front End]]></category>
		<category><![CDATA[Hooks]]></category>
		<category><![CDATA[React]]></category>
		<guid isPermaLink="false">https://www.emm-gfx.net/?p=3139</guid>

					<description><![CDATA[<p>Los hooks nos permiten externalizar, encapsular y reutilizar lógica. Yendo a lo básico, podemos recordar que los componentes de clase tenían métodos concretos y propios extendidos de React.Component mientras que los componentes funcionales no. Son sólo una función con lo que nosotros le incluyamos, de manera que no tenemos ni constructor en el que definir [&#8230;]</p>
<p>La entrada <a href="https://www.emm-gfx.net/2021/08/hooks-para-componentes-funcionales/">Hooks para componentes funcionales</a> se publicó primero en <a href="https://www.emm-gfx.net">EMMGFX</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Los <em>hooks</em> nos permiten externalizar, encapsular y reutilizar lógica. Yendo a lo básico, podemos recordar que los <a href="https://www.emm-gfx.net/2021/08/componentes-de-clase-en-react/" target="_blank" rel="noreferrer noopener">componentes de clase</a> tenían métodos concretos y propios extendidos de <code>React.Component</code> mientras que los <a href="https://www.emm-gfx.net/2021/08/componentes-funcionales-en-react/" target="_blank" rel="noreferrer noopener">componentes funcionales</a> no. Son sólo una función con lo que nosotros le incluyamos, de manera que no tenemos ni constructor en el que definir <code>this.state = {}</code> ni método <code>setState()</code> ni nada, así que lo primero que deberíamos aprender es cómo utilizar un state en un funcional.</p>



<h2 class="wp-block-heading">El <em>hook</em> de estado</h2>



<p>Lo primero que habría que hacer es importarlo. Ten en cuenta que en las últimas versiones no hace falta importar React en cada componente, así que sería algo así:</p>



<pre class="wp-block-preformatted">import { useState } from 'react';</pre>



<p>¿Por qué <code>useState</code>? porque la norma dice que si es un <em>hook</em> empieza por «use», y como básicamente sirve para gestionar un <code>state</code>, no hay más  que hablar.</p>



<p>Usarlo es casi igual de sencillo que importarlo. Para ilustrarlo voy a usar el ejemplo de siempre: un contador.</p>



<pre class="wp-block-preformatted">const [count, setCount] = useState(0);</pre>



<p>¿Identificas la sintaxis? El método <code>useState</code> retorna un <em>array</em> con dos valores, de manera que podemos desestructurarlo. Ya sé que al principio puede parecer magia, pero qué bien se lee, ¿verdad? Y para terminar, el <code>0</code> que le estamos mandando como parámetro es el valor inicial de ese estado.</p>



<p>Un ejemplo rápido pero completo:</p>



<pre class="wp-block-preformatted">import { useState } from "react";

const App = () => {

  const [count, setCount] = useState(0);

  return (
    &lt;>
      &lt;h1>You made {count} clicks&lt;/h1>
      &lt;button onClick={() => setCount(count + 1)}>Increase&lt;/button>
    &lt;/>
  );
};</pre>



<p>Y listo. Tal y como yo lo veo, es más fácil que el <code>this.setState</code> de las clases. Lo malo es que siempre hay un pero, y en este caso es importante: no hay <em>callback</em> y los <em>setters</em> son asíncronos, así que hay que tener cuidado con esto.</p>



<p>Siguiendo el ejemplo anterior, vamos a introducir el siguiente <em>hook</em>, que también es de los más usados: <code>useEffect</code>.</p>



<h2 class="wp-block-heading">El <em>hook</em> de «efecto»</h2>



<p>Imagino que todo empieza a parecer casi tan confuso como interesante <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f602.png" alt="😂" class="wp-smiley" style="height: 1em; max-height: 1em;" /> . Con <meta charset="utf-8"><code>useEffect</code> podemos enterarnos de cuando hay cambios. Esto es muy interesante, porque sólo con el método <meta charset="utf-8"><code>useEffect</code> podemos hacer lo mismo que con <code>componentDidMount</code>, <code>componentDidUpdate</code> y <code>componentWillUnmount</code>. Sé que al principio es confuso, pero dale una oportunidad y verás que tiene bastante sentido.</p>



<p>Vamos a crear otro <code>state</code> en el que mantendremos un booleano indicando si el contador ha sido incrementado o no, simplemente así:</p>



<pre class="wp-block-preformatted">const [increased, setIncreased] = useState(false);</pre>



<p>Y el componente no retornará siempre el mismo <code>h1</code>, le diremos que si no se ha incrementado nunca muestre otra cosa:</p>



<pre class="wp-block-preformatted">{ increased ?
  &lt;h1>You made {count} clicks&lt;/h1> : 
  &lt;h1>Not clicked yet&lt;/h1>
}</pre>



<p>Ahora bien, ¿cómo actualizamos el valor de <code>increased</code>? Podríamos hacerlo «escuchando» los cambios en <code>counter</code>. Y ahí aparece <code>useEffect</code>, que recibe una función en el primer parámetro y un <em>array</em> de dependencias, estas dependencias son las que, en caso de cambiar, dispararán la función del primer parámetro.</p>



<pre class="wp-block-preformatted">useEffect(() => {
  setIncreased(true);
}, [count]);</pre>



<p>Ahora deberíamos tener un código más o menos así:</p>



<pre class="wp-block-preformatted">import { useState, useEffect } from "react";

const App = () => {

  const [count, setCount] = useState(0);
  const [increased, setIncreased] = useState(false);

  useEffect(() => {
    setIncreased(true);
  }, [count]);

  return (
    &lt;>
      { increased ?
        &lt;h1>You made {count} clicks&lt;/h1> : 
        &lt;h1>Not clicked yet&lt;/h1>
      } 
      &lt;button onClick={() => setCount(count + 1)}>Increase&lt;/button>
    &lt;/>
  );
};</pre>



<p>Esto sería casi correcto y está a punto de funcionar. ¿Por qué no funciona? Porque en cuanto el componente se <em>monta</em> hace el primer <code>setCount</code>, que <em>rebota</em> en ese <code>useEffect</code> y <em>setea</em> <code>increased</code> a <code>true</code>.</p>



<p>Ahora deberíamos conocer si ese efecto está ejecutandose por el montado o por un cambio «real» en count, lo que nos lleva diréctamente al siguiente <em>hook</em>: <code>useRef</code>.</p>



<h2 class="wp-block-heading">El <em>hook</em> de referencia</h2>



<p>Y con este vamos a ir terminando, no desesperes. El <em>hook</em> <code>useRef</code> sirve para mantener un valor durante la vida del componente, es decir, que no se reiniciará en cada <em>render</em>. Su uso más habitual no es este que voy a darle ahora, pero es muy adecuado y viene bien para enlazar estos 3 <em>hooks</em>. Vamos allá:</p>



<p>Lo primero sería crear una referencia en la que almacenaremos un booleano con el que sabemos si estamos en la primera ejecución o no.</p>



<pre class="wp-block-preformatted">const firstUpdate = React.useRef(true);</pre>



<p>El segundo paso sería utilizar de nuevo el hook <code>useEffect</code> para actualizar el valor de <code>firstUpdate</code> cuando fuera necesario.</p>



<pre class="wp-block-preformatted">useEffect(() => {
  if(firstUpdate.current) {
    firstUpdate.current = false;
    return;
  }
}, []);

// Fíjate en el array de dependencias. Como ves está vacío, 
// eso significa que tendrá un comportamiento similar a componentDidMount
// y sólo se ejecutará en el primer renderizado, lo cual ya nos va bien.</pre>



<p>Como ves, en <code>firstUpdate</code> no se guarda directamente el valor, si no que está en su propiedad <code>current</code>.</p>



<p>Para terminar sólo habría que actualizar el efecto anterior para que sólo modifique el estado <code>increased</code> en caso de que no sea el primer <em>render</em>.</p>



<pre class="wp-block-preformatted">useEffect(() => {
  if(!firstUpdate.current){
    setIncreased(true); 
  }
}, [count]);</pre>



<p>Y ahora sí, ya estaría terminado y para ejemplificarlo en condiciones un Codepen en el que se puede ver el resultado y el código final.</p>


<p class='codepen'  data-height='300' data-theme-id='0' data-slug-hash='PomvxJm' data-default-tab='result' data-animations='run' data-editable='' data-embed-version='2'>
See the Pen 
   by Josep Viciana (@emmgfx)
  on CodePen.</p>




<p>Photo by <strong><a href="https://www.pexels.com/@anete-lusina?utm_content=attributionCopyText&amp;utm_medium=referral&amp;utm_source=pexels">Anete Lusina</a></strong> from <strong><a href="https://www.pexels.com/photo/pink-yarn-on-gray-cozy-sofa-4792062/?utm_content=attributionCopyText&amp;utm_medium=referral&amp;utm_source=pexels">Pexels</a></strong></p>
<p>La entrada <a href="https://www.emm-gfx.net/2021/08/hooks-para-componentes-funcionales/">Hooks para componentes funcionales</a> se publicó primero en <a href="https://www.emm-gfx.net">EMMGFX</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.emm-gfx.net/2021/08/hooks-para-componentes-funcionales/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">3139</post-id>	</item>
		<item>
		<title>Componentes funcionales en React</title>
		<link>https://www.emm-gfx.net/2021/08/componentes-funcionales-en-react/</link>
					<comments>https://www.emm-gfx.net/2021/08/componentes-funcionales-en-react/#comments</comments>
		
		<dc:creator><![CDATA[Josep Viciana]]></dc:creator>
		<pubDate>Tue, 17 Aug 2021 08:57:39 +0000</pubDate>
				<category><![CDATA[Frontend]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[ES6]]></category>
		<category><![CDATA[Front End]]></category>
		<category><![CDATA[React]]></category>
		<guid isPermaLink="false">https://www.emm-gfx.net/?p=3126</guid>

					<description><![CDATA[<p>En el último post vimos cómo escribir un componente de clase de React, con sus métodos para controlar el ciclo de vida y algunos detalles más. En este voy a intentar explicar las bases de los componentes funcionales. Como este articulo no incluye gestión del ciclo de vida ni estados porque esos puntos tienen un [&#8230;]</p>
<p>La entrada <a href="https://www.emm-gfx.net/2021/08/componentes-funcionales-en-react/">Componentes funcionales en React</a> se publicó primero en <a href="https://www.emm-gfx.net">EMMGFX</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>En el último post vimos <a href="https://www.emm-gfx.net/2021/08/componentes-de-clase-en-react/" target="_blank" rel="noreferrer noopener">cómo escribir un componente de clase de React</a>, con sus métodos para controlar el ciclo de vida y algunos detalles más. En este voy a intentar explicar las bases de los componentes funcionales.</p>



<p>Como este articulo no incluye gestión del ciclo de vida ni estados porque esos puntos tienen un post dedicado, aprovecho para enlazarlo con el anterior <a href="https://www.emm-gfx.net/2021/07/la-desestructuracion-de-arrays-y-objetos/" target="_blank" rel="noreferrer noopener">artículo sobre la desestructuración</a>.</p>



<p>Para empezar, lo más sencillo:</p>



<pre class="wp-block-preformatted">const Greeting = () =&gt; {
  return (
    &lt;p&gt;Hello world&lt;/p&gt;
  )
}</pre>



<p>Podría simplificarse incluso más (<code>const Greeting = () =&gt; &lt;p&gt;Hello world&lt;/p&gt;</code>) pero como sabemos que vamos a ir ampliándolo no tendría mucho sentido ir a una versión tan reducida.</p>



<h2 class="wp-block-heading">Cómo recibir <code>props</code></h2>



<p>Voy a poner tres ejemplos para ver las opciones más comunes: recibir el objeto props, desestructurarlo y aplicarle valores por defecto.</p>



<p>El único parámetro de la función es el objeto props, y es opcional.</p>



<pre class="wp-block-preformatted"><meta charset="utf-8">const Greeting = (props) =&gt; {
  return (
    &lt;p&gt;Hello {props.name}&lt;/p&gt;
  )
}</pre>



<p>Normalmente sabremos los valores que vamos a recibir, así que sería una buena práctica desestructurar ya que serviría para, de alguna manera, describir qué opciones deberían estar disponibles.</p>



<pre class="wp-block-preformatted"><meta charset="utf-8">const Greeting = ({ name }) =&gt; {
  return (
    &lt;p&gt;Hello {name}&lt;/p&gt;
  )
}</pre>



<p>Y cuando estamos desestructurando podemos describir valores por defecto:</p>



<pre class="wp-block-preformatted"><meta charset="utf-8">const Greeting = ({ name = "Anonymous" }) =&gt; {
  return (
    &lt;p&gt;Hello {name}&lt;/p&gt;
  )
}</pre>



<h2 class="wp-block-heading">Cuestiones importantes</h2>



<p>Un componente funcional <strong>es básicamente esto</strong> y no necesita nada más, pero hay que tener en cuenta algunas cosas. Estos componentes no «viven» como una instancia que se mantiene en el tiempo; cada vez que hay un cambio (<code>props</code> o <code>state</code>, que veremos más adelante) se vuelve a ejecutar y todo el código se repite. Esto al principio suele dar muchos problemas de exceso de <em>renderizados</em> o comportamientos inesperados.</p>



<p>Es por eso que dependen muchísimo de los <em>hooks</em>. Si no te suenan no te preocupes, a partir de ahora los verás por todos lados, empezando por el próximo artículo sobre <a href="https://www.emm-gfx.net/2021/08/hooks-para-componentes-funcionales/" target="_blank" rel="noreferrer noopener">los <em>hooks</em> principales</a>.</p>



<p>Photo by <a href="https://unsplash.com/@devanshudamle?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Devanshu Damle</a> on <a href="https://unsplash.com/s/photos/rubik?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a></p>
<p>La entrada <a href="https://www.emm-gfx.net/2021/08/componentes-funcionales-en-react/">Componentes funcionales en React</a> se publicó primero en <a href="https://www.emm-gfx.net">EMMGFX</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.emm-gfx.net/2021/08/componentes-funcionales-en-react/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">3126</post-id>	</item>
		<item>
		<title>Componentes de clase en React</title>
		<link>https://www.emm-gfx.net/2021/08/componentes-de-clase-en-react/</link>
					<comments>https://www.emm-gfx.net/2021/08/componentes-de-clase-en-react/#comments</comments>
		
		<dc:creator><![CDATA[Josep Viciana]]></dc:creator>
		<pubDate>Mon, 16 Aug 2021 08:23:33 +0000</pubDate>
				<category><![CDATA[Frontend]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[ES6]]></category>
		<category><![CDATA[Front End]]></category>
		<category><![CDATA[React]]></category>
		<guid isPermaLink="false">https://www.emm-gfx.net/?p=3111</guid>

					<description><![CDATA[<p>Hay dos tipos de componentes: de clase y funcionales. En este post voy a explicar los de clase. Para empezar hay que tener en cuenta que los componentes de clase se escriben utilizando clases de ES6 y que deben extender la clase Component de React. Los componentes de clase son capaces de gestionar su propio [&#8230;]</p>
<p>La entrada <a href="https://www.emm-gfx.net/2021/08/componentes-de-clase-en-react/">Componentes de clase en React</a> se publicó primero en <a href="https://www.emm-gfx.net">EMMGFX</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Hay dos tipos de componentes: de clase y funcionales. En este post voy a explicar los de clase.</p>



<p>Para empezar hay que tener en cuenta que los componentes de clase se escriben utilizando <a href="https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Classes" target="_blank" rel="noreferrer noopener">clases de ES6</a> y que deben extender la <a href="https://es.reactjs.org/docs/react-component.html" target="_blank" rel="noreferrer noopener">clase Component de React</a>. Los componentes de clase son capaces de gestionar su propio estado y ciclo de vida, mientras que los funcionales teóricamente no, aunque podremos sobrellevarlo y casi parece que puedan.</p>



<p>Nada más fácil para entender como funciona un componente de clase que un ejemplo:</p>



<pre class="wp-block-preformatted">// Importamos React
import React from "react";

// Creamos una nueva clase extendiendo Component
class ExampleComponent extends React.Component {

  // El constructor, opcional
  constructor(props) {
    super(props);
    this.state = {}
  }

  // Existen métodos para controlar el ciclo de vida
  componentDidMount() {
    console.log("componentDidMount");
  }


  // Método render, el único obligatorio
  render() {
    return (
      &lt;div>
        &lt;h1>Example Component&lt;/h1>
        &lt;p>This is a class component&lt;/p>
      &lt;/div>
    );
  }

}</pre>



<p>En el ejemplo sólo he utilizado el método <code>componentDidMount</code> para la gestión del ciclo de vida, pero hay otros: esencialmente <code>componentDidUpdate</code> y <code>componentWillUnmount</code>. El primero se ejecuta cuando hay cambios en el <code>state</code> o las <code>props</code>, y el segundo, quizá*, antes de desmontarse el componente.</p>



<p class="has-small-font-size">* No puedes depender de ese método para funciones críticas (notificar la salida al servidor, por ejemplo) ya que cerrar la pestaña de alguna manera también desmontaría el componente y no ejecutaría ese método.</p>



<h2 class="wp-block-heading">Cómo usar <code>componentDidUpdate</code></h2>



<p>Dentro de <code>componentDidUpdate</code> podemos utilizar dos objetos, <code>prevProps</code> y <code>prevState</code>. Con ellos podrás buscar y analizar las diferencias para valorar lo que quieres hacer. Por ejemplo:</p>



<pre class="wp-block-preformatted">componentDidUpdate(prevProps, prevState) {

  if (this.props.isOpen !== prevProps.isOpen) {
    // Sabemos que isOpen ha cambiado
    if (this.props.isOpen) {
      // Y que ha cambiado de false a true...
    } else {
      // ...o que ha cambiado de true a false
    }
  }

}</pre>



<h2 class="wp-block-heading">Usar <code>state</code> y <code>props</code></h2>



<p>En los componentes de clase tenemos el objeto <code>this</code>, y es desde ahí desde donde podemos leer tanto el <code>state</code> como las <code>props</code>.</p>



<pre class="wp-block-preformatted">render() {
  return (
    &lt;div>
      &lt;h1>Example Component&lt;/h1>
      { this.state.loggedIn &amp;&amp;
        &lt;p>Hola {this.props.name}&lt;/p>
      }
    &lt;/div>
  );
}</pre>



<h2 class="wp-block-heading">Actualizar el <code>state</code></h2>



<p>Mientras que las <code>props</code> no se pueden modificar por motivos obvios, el <code>state</code> sí, se hace a través del método <code>setState</code> (que también tenemos en <code>this</code>).</p>



<pre class="wp-block-preformatted">constructor(props) {
  super(props);
  this.state = {
    counter: 0,
  }
}

increaseCounter() {
  this.setState({
    counter: this.state.counter + 1,
  });
}

render() {
  return (
    &lt;div>
      &lt;h1>Counter: {this.state.counter}&lt;/h1>
      &lt;button onClick={this.increaseCounter}>Increase&lt;/button>
    &lt;/div>
  );
}</pre>



<p>El método <code>increaseCounter</code> también podría reducirse usando funciones flecha.</p>



<pre class="wp-block-preformatted">increaseCounter = () => this.setState({
  counter: this.state.counter + 1,
});</pre>



<h2 class="wp-block-heading">Cuando usar un componente de clase</h2>



<p>Pues <strong>depende del proyecto y del componente</strong>. Mi consejo es que intentes no usarlos, porque lo recomendado en las últimas versiones de React es que se usen funcionales y hooks, que además suelen ser más sencillos de escribir y hay más documentación en internet.</p>



<p>Pero no hay una diferencia técnica tan importante, puedes usar los unos, los otros, o incluso tenerlos mezclados (abro paraguas). Si estás aprendiendo y tienes tiempo, te recomiendo que intentes escribir algunos componentes primero con clases y luego los conviertas a funcionales para poder ver sus diferencias y <em>handicaps</em>.</p>



<p>Photo by <a href="https://unsplash.com/@ryanquintal?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Ryan Quintal</a> on <a href="https://unsplash.com/s/photos/block?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a>.</p>
<p>La entrada <a href="https://www.emm-gfx.net/2021/08/componentes-de-clase-en-react/">Componentes de clase en React</a> se publicó primero en <a href="https://www.emm-gfx.net">EMMGFX</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.emm-gfx.net/2021/08/componentes-de-clase-en-react/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">3111</post-id>	</item>
		<item>
		<title>Qué es JSX y como usarlo</title>
		<link>https://www.emm-gfx.net/2021/08/que-es-jsx-y-como-usarlo/</link>
					<comments>https://www.emm-gfx.net/2021/08/que-es-jsx-y-como-usarlo/#respond</comments>
		
		<dc:creator><![CDATA[Josep Viciana]]></dc:creator>
		<pubDate>Mon, 02 Aug 2021 18:23:56 +0000</pubDate>
				<category><![CDATA[Frontend]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Front End]]></category>
		<category><![CDATA[JSX]]></category>
		<category><![CDATA[React]]></category>
		<guid isPermaLink="false">https://www.emm-gfx.net/?p=3075</guid>

					<description><![CDATA[<p>Lo que siempre pasa cuando alguien que está viendo código de React por primera vez y ve la parte de JSX es que cree que es HTML, pero no lo es. JSX (JavaScript XML) sirve para escribir HTML en JavaScript. Si al principio te suena mal o te parece complicado no te asustes: es muy [&#8230;]</p>
<p>La entrada <a href="https://www.emm-gfx.net/2021/08/que-es-jsx-y-como-usarlo/">Qué es JSX y como usarlo</a> se publicó primero en <a href="https://www.emm-gfx.net">EMMGFX</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Lo que siempre pasa cuando alguien que está viendo código de React por primera vez y ve la parte de JSX es que cree que es HTML, <strong>pero no lo es</strong>. JSX (JavaScript XML) sirve para escribir HTML en JavaScript.</p>



<p>Si al principio te suena mal o te parece complicado no te asustes: <strong>es muy sencillo</strong>. Tan sencillo que como digo, las personas que se están iniciando lo confunden. Pero antes de empezar a explicar cómo hacer determinadas cosas, explicaré un poco de base para que luego todo se entienda más fácil.</p>



<p>En 3 puntos:</p>



<ol class="wp-block-list"><li>Cuando se escribe JSX en realidad estás escribiendo JavaScript.</li><li>Un proceso de compilado se encargará de convertirlo en algo más parecido al JavaScript que ya conoces, el que no parece HTML.</li><li>Este código compilado será el que se encargue de crear y gestionar elementos del DOM, es decir, el HTML real.</li></ol>



<p>Un ejemplo:</p>



<div class="wp-block-codemirror-blocks-code-block code-block"><pre class="CodeMirror" data-setting="{&quot;showPanel&quot;:false,&quot;languageLabel&quot;:&quot;language&quot;,&quot;fullScreenButton&quot;:false,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;javascript&quot;,&quot;mime&quot;:&quot;text/javascript&quot;,&quot;theme&quot;:&quot;material&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;language&quot;:&quot;JavaScript&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;js&quot;}">// Este código:
const element = &lt;p&gt;Lorem Ipsum&lt;/p&gt;;

// Una vez compilado acabaría así:
const element = React.createElement('p', {}, &quot;Lorem Ipsum&quot;);</pre></div>



<p>A partir de ahí React se encargará de pasarlo a su <a href="https://es.reactjs.org/docs/faq-internals.html" target="_blank" rel="noreferrer noopener">DOM virtual</a> y de ahí al DOM <em>real</em>. Pero de todo eso te puedes desentender.</p>



<h2 class="wp-block-heading">Palabras reservadas y camelCase</h2>



<p>Debes tener en cuenta que al estar escribiendo JavaScript, hay ciertas discrepancias respecto a HTML con las que te vas a encontrar, como son el uso de <strong>palabras reservadas</strong> o el uso de <strong>camelCase</strong>.</p>



<p>Por ejemplo, no puedes escribir <code>&lt;div class="..."></code>, ya que class es una <strong>palabra reservada</strong> de JavaScript, en su lugar se utiliza <code>&lt;div className="..."></code>, de hecho si estás tratando con el DOM directamente tiene este mismo nombre y por el mismo motivo. De la misma forma, en lugar de escribir <code>tabindex=""</code> escribirás <code>tabIndex=""</code> siguiendo el estilo de JavaScript en lugar de HTML.</p>



<p>Tenlo en cuenta también si trabajas con SVG&#8217;s ya que es código que normalmente no escribirás tu y está lleno de palabras inválidas como <code>fill-rule</code> o <code>stroke-width</code>, entre muchas otras, que tendrás que cambiar por <code>fillRule</code> y <code>strokeWidth</code>.</p>



<h2 class="wp-block-heading">Como incluir una expresión</h2>



<p>Es tan sencillo que lo explico directamente con algunos ejemplos:</p>



<div class="wp-block-codemirror-blocks-code-block code-block"><pre class="CodeMirror" data-setting="{&quot;showPanel&quot;:false,&quot;languageLabel&quot;:&quot;language&quot;,&quot;fullScreenButton&quot;:false,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;javascript&quot;,&quot;mime&quot;:&quot;text/javascript&quot;,&quot;theme&quot;:&quot;material&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;language&quot;:&quot;JavaScript&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;js&quot;}">// Podemos poner simplemente un string:
const name = &quot;John&quot;;
const greetings = &lt;p&gt;Hello {name}&lt;/p&gt;;

// Una función:
const name = &quot;John&quot;;
const phrase = (name) =&gt; `Hello ${name}`;
const greetings = &lt;p&gt;{phrase(name)}&lt;/p&gt;;

// Unas sumas sencillas:
const userNotifications = 40;
const systemNofitications = 2;
const alert = &lt;p&gt;You have { userNotifications + systemNotifications } notifications&lt;/p&gt;

// O mucho más:
const notifications = [
  { id: 1, text: &quot;Lorem Ipsum&quot; },
  { id: 2, text: &quot;Dolor Sit Amet&quot; },
  ...
];

const list = &lt;ul&gt;{
  notifications.map((notification) =&gt; {
    return &lt;li key={notification.id}&gt;{notification.text}&lt;/li&gt;);
  });
}&lt;/ul&gt;</pre></div>



<p>Si estos ejemplos se han entendido más o menos y no te parecen una cosa extrañísima, ya lo tienes casi todo. En unas horas de práctica lo dominarás. No tienes que preocuparte de nada más, ni siquiera de problemas de inyección de código y demás, ya que JSX se encarga de escapar todo lo que procesa.</p>



<h2 class="wp-block-heading">Ejemplos prácticos</h2>



<p>Podrías incluir un elemento de forma condicional así:</p>



<div class="wp-block-codemirror-blocks-code-block code-block"><pre class="CodeMirror" data-setting="{&quot;showPanel&quot;:false,&quot;languageLabel&quot;:&quot;language&quot;,&quot;fullScreenButton&quot;:false,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;javascript&quot;,&quot;mime&quot;:&quot;text/javascript&quot;,&quot;theme&quot;:&quot;material&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;language&quot;:&quot;JavaScript&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;js&quot;}">{ showHeader &amp;&amp; &lt;Header /&gt; }</pre></div>



<p>O podrías pasar un parámetro (o <code>prop</code>, como veremos en siguientes artículos) a ese mismo header así:</p>



<div class="wp-block-codemirror-blocks-code-block code-block"><pre class="CodeMirror" data-setting="{&quot;showPanel&quot;:false,&quot;languageLabel&quot;:&quot;language&quot;,&quot;fullScreenButton&quot;:false,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;javascript&quot;,&quot;mime&quot;:&quot;text/javascript&quot;,&quot;theme&quot;:&quot;material&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;language&quot;:&quot;JavaScript&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;js&quot;}">&lt;Header sticky={false} /&gt;</pre></div>



<p>Aunque ya se ha visto en un ejemplo anterior, pongo otro de como podrías mostrar un listado:</p>



<div class="wp-block-codemirror-blocks-code-block code-block"><pre class="CodeMirror" data-setting="{&quot;showPanel&quot;:false,&quot;languageLabel&quot;:&quot;language&quot;,&quot;fullScreenButton&quot;:false,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;javascript&quot;,&quot;mime&quot;:&quot;text/javascript&quot;,&quot;theme&quot;:&quot;material&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;language&quot;:&quot;JavaScript&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;js&quot;}">const TasksList = () =&gt; {
  const tasks = ['task 1', 'task 2', 'task 3'];
  return (
    &lt;ul&gt;
      { tasks.map((text) =&gt; &lt;li key={&lt;meta charset=&quot;utf-8&quot;&gt;text}&gt;{&lt;meta charset=&quot;utf-8&quot;&gt;text}&lt;/li&gt;) }
    &lt;/ul&gt;
  );
}</pre></div>



<p>Puedes usar condicionales ternarios, pero con cuidado no vayas a crear un código poco legible.</p>



<div class="wp-block-codemirror-blocks-code-block code-block"><pre class="CodeMirror" data-setting="{&quot;showPanel&quot;:false,&quot;languageLabel&quot;:&quot;language&quot;,&quot;fullScreenButton&quot;:false,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;javascript&quot;,&quot;mime&quot;:&quot;text/javascript&quot;,&quot;theme&quot;:&quot;material&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;language&quot;:&quot;JavaScript&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;js&quot;}">const logged = false;
//...
&lt;p&gt;{ logged ? &quot;No has iniciado sesión&quot; : &quot;Sesión iniciada }&lt;/p&gt;</pre></div>



<p>No puedes usar un <code>switch</code> directamente en JSX, pero sí podrías aprovechar los ternarios para algo parecido:</p>



<div class="wp-block-codemirror-blocks-code-block code-block"><pre class="CodeMirror" data-setting="{&quot;showPanel&quot;:false,&quot;languageLabel&quot;:&quot;language&quot;,&quot;fullScreenButton&quot;:false,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;javascript&quot;,&quot;mime&quot;:&quot;text/javascript&quot;,&quot;theme&quot;:&quot;material&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:false,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;language&quot;:&quot;JavaScript&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;js&quot;}">&lt;p&gt;
  {
    code === 400 ? &quot;Bad Request&quot; :
    code === 401 ? &quot;Unauthorized&quot; :
    code === 402 ? &quot;Payment Required&quot; :
    code === 403 ? &quot;Forbidden&quot; :
    code === 404 ? &quot;Not found&quot; :
    `Unknown error (${code})`
  } 
&lt;/p&gt;</pre></div>



<h2 class="wp-block-heading">Conclusiones</h2>



<p>Como ves, aunque hay que habituarse, no implica ninguna complejidad ni debería suponer ningún problema controlarlo completamente. Mi consejo en todo caso, es que intentes repasar el uso de operadores modernos, como <code>&amp;&amp;</code>, <code>??</code> y <code>||</code>, porque te ayudarán a entender mejor el código de los demás y escribir un código más sencillo.</p>



<p>Photo by <a href="https://unsplash.com/@flowforfrank?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Ferenc Almasi</a> on <a href="https://unsplash.com/s/photos/react-js?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a>.</p>
<p>La entrada <a href="https://www.emm-gfx.net/2021/08/que-es-jsx-y-como-usarlo/">Qué es JSX y como usarlo</a> se publicó primero en <a href="https://www.emm-gfx.net">EMMGFX</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.emm-gfx.net/2021/08/que-es-jsx-y-como-usarlo/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">3075</post-id>	</item>
		<item>
		<title>Qué son los scopes y las variables let, const y var</title>
		<link>https://www.emm-gfx.net/2021/07/que-son-los-scopes-y-las-variables-let-const-y-var/</link>
					<comments>https://www.emm-gfx.net/2021/07/que-son-los-scopes-y-las-variables-let-const-y-var/#respond</comments>
		
		<dc:creator><![CDATA[Josep Viciana]]></dc:creator>
		<pubDate>Mon, 19 Jul 2021 14:03:16 +0000</pubDate>
				<category><![CDATA[Frontend]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Scope]]></category>
		<category><![CDATA[Variables]]></category>
		<guid isPermaLink="false">https://www.emm-gfx.net/?p=3050</guid>

					<description><![CDATA[<p>En este artículo explico qué son los scopes y las variables let, const y var y cómo pueden ser una ventaja o un problema. En lineas generales las palabras let, const y var sirven para describir su scope y comportamiento. Así que lo primero sería entender qué es esto del scope. Antes de nada, los [&#8230;]</p>
<p>La entrada <a href="https://www.emm-gfx.net/2021/07/que-son-los-scopes-y-las-variables-let-const-y-var/">Qué son los scopes y las variables let, const y var</a> se publicó primero en <a href="https://www.emm-gfx.net">EMMGFX</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>En este artículo explico qué son los scopes y las variables let, const y var y cómo pueden ser una ventaja o un problema. En lineas generales las palabras <code>let</code>, <code>const</code> y <code>var</code> sirven para describir su <em>scope</em> y comportamiento. Así que lo primero sería entender qué es esto del <em>scope</em>.</p>



<h2 class="wp-block-heading">Antes de nada, los <em>scopes</em></h2>



<p>Hay 3 tipos de <em>scopes</em>, que dicho de una forma más natural, vendría a ser el lugar en el que viven y son accesibles las variables. Existe el <em>global scope</em>, el <em>local scope</em> y el <em>block scope</em>. Tanto <code>let</code> como <code>const</code> forman parte de este último.</p>



<p><strong>El global scope </strong>es el que se puede escribir y leer en cualquier lugar, y viviría en el objeto <code>window</code>. Por ejemplo:</p>



<pre class="wp-block-preformatted">(function test(){
  name = "Barb"; // Ojo, no uso la palabra var
})();
console.log(window.name); // Barb</pre>



<p>Imagina lo peligroso que es esto, tienes variables que se pueden sobreescribir y no sabes ni por dónde te van a venir los palos.</p>



<p><strong>El local scope</strong> contendría las variables dentro de una función, y para usarlo se escribiría <code>var</code> delante.</p>



<pre id="block-e5ed3362-9844-4fe5-bb52-81e7f75ed733" class="wp-block-preformatted">(function test(){
  var name = "Barb";
})();
console.log(window.name); // undefined (name sólo existe dentro de test()</pre>



<p><strong>El block scope</strong> vendría a ser el comportamiento que habitualmente esperarías. Es parecido al <em>local scope</em> pero ligeramente más restrictivo ya que restringe a cualquier bloque delimitado por <code>{}</code>, no sólo funciones.</p>



<pre class="wp-block-preformatted">(function test(){

  let letters = ["B", "i", "g", "g", "i", "e"];
  let name = "";

  for(let i = 0; i &lt; letters.length; i++){
    // Dentro de este bloque tengo acceso tanto a name como a i
    name += letters[i];
  }

  // En este bloque ya no tengo acceso a i, sólo a letters y name.
  console.log(letters); // ["B", "i", "g", "g", "i", "e"]
  console.log(name); // "Biggie"
  console.log(i); // Uncaught ReferenceError: i is not defined
})();</pre>



<p>¿Qué pasaría si en este <code>for</code> hubiéramos definido la <code>i</code> del bucle con <code>var</code> en lugar de <code>let</code>? Pues que el último <code>console.log</code> no fallaría, mantendríamos acceso a él desde ahí (y podríamos modificarlo). ¿Y si hubiéramos omitido usar <code>var</code> siquiera? <strong>El desastre</strong>: tendríamos acceso a esa i en cualquier lugar del código. </p>



<h2 class="wp-block-heading">Cuando usar const</h2>



<p>Usamos const cuando el valor de la variable no se puede reasignar. Por ejemplo si decimos que <code>const name = "Poppy";</code>, desde ese momento no podremos volver a definirlo, ni volviendo a usar la palabra clave <code>const</code> ni sin ella, de manera que <code>name = "Barb"</code>; daría un error como este:</p>



<pre class="wp-block-preformatted">Uncaught TypeError: Assignment to constant variable.</pre>



<p>Esto no significa que sea inmutable. La inmutabilidad es otro concepto interesante pero que no explicaré de momento, quiero mantener esto sencillo. El valor podría mutar en una situación como esta:</p>



<pre class="wp-block-preformatted">const characters = ["Poppy", "Barb", "Branch"]; // Define un array
characters.push("Mr. Dinkles"); // Agrega un nuevo índice, sin problemas
console.log(characters) // ["Poppy", "Barb", "Branch", "Mr. Dinkles"]</pre>



<p></p>



<p><strong>¿Cuál es la ventaja de usar const?</strong> Principalmente que no sobreescribirás el valor por error llevándote a un escenario impredecible en el que puedes no saber de dónde sale, o dicho de otra forma: el código se vuelve más legible. Esta es la ventaja <em>humana</em>, pero también hay una ventaja técnica: Se mejoran los consumos de memoria, aunque en realidad eso es algo menos relevante y se me escapa muchísimo.</p>



<h2 class="wp-block-heading">Cuando usar let</h2>



<p>Cuando vayas a necesitar modificar el valor de una variable. Para poner un ejemplo volvamos al bucle anterior.</p>



<pre id="block-23d010e1-a679-4cc0-94a7-2dd70b476620" class="wp-block-preformatted">for(let i = 0; i &lt; letters.length; i++){
  // La i se define con let, así que es modificable y vive
  // dentro de este bloque.
}

for(const i = 0; i &lt; letters.length; i++){
  // Si la definimos con const, cuando intentamos incrementar
  // su valor para pasar a la siguiente iteración, dará un error:
  // Uncaught TypeError: Assignment to constant variable.
}</pre>



<p>Otro ejemplo habitual sería algo así:</p>



<pre class="wp-block-preformatted">let string = "Esta cadena ? es modificable";
string = string.replace("?", "sí");
console.log(string); // "Esta cadena sí es modificable"

const string = "Esta cadena ? es modificable";
string = string.replace("?", "no");
console.log(string); // Uncaught TypeError: Assignment to constant variable</pre>



<h2 class="wp-block-heading">Conclusiones</h2>



<ul class="wp-block-list"><li>Puedes usar <code>const</code> por defecto, y en caso de necesitar modificarlo y cambiar a <code>let</code>.</li><li>Raramente utilizarás <code>var</code>, y ante la duda no deberías usarlo.</li><li>Definir una variable sin declararla es algo peligroso.</li></ul>



<p>Photo by <a href="https://unsplash.com/@raayzor?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Raymond Lee</a> on <a href="https://unsplash.com/s/photos/binocular?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a></p>
<p>La entrada <a href="https://www.emm-gfx.net/2021/07/que-son-los-scopes-y-las-variables-let-const-y-var/">Qué son los scopes y las variables let, const y var</a> se publicó primero en <a href="https://www.emm-gfx.net">EMMGFX</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.emm-gfx.net/2021/07/que-son-los-scopes-y-las-variables-let-const-y-var/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">3050</post-id>	</item>
	</channel>
</rss>
