Así que lo primero que creo que es conceptualmente la causa de este problema es pensar que los componentes funcionales son realmente algo que existe y creo que eso es una especie de trampa mental en la que probablemente deberíamos profundizar un poco más. Así que vamos a ver eso. Cuando tenemos un componente de clase de React, que es como la mayoría de nosotros comenzamos a usar React, tienes a React creando un nuevo componente. Entonces tiene una instancia de ese componente que mantiene y ejecuta component did mount, component will receive props, component did update y todo eso y finalmente renderiza. Continuará ejecutando todo ese ciclo de vida y produciendo JSX en esa instancia que realmente existe que tiene durante la vida útil de tu componente hasta que se desmonta.
Ahora veamos un componente funcional. Lo primero que hace React es tomar las props y pasarlas a una función y esta función es lo que pensamos como tu componente y luego ese componente producirá JSX. Si el JSX es el mismo que el JSX de la vez anterior que fue llamado, que llamó a esa función, lo volverá a renderizar, de lo contrario no hace nada con el resultado de llamar a esa función. Pero de todos modos, tan pronto como tiene ese JSX, esa renderización de tu función está hecha, estás fuera de ese mundo. Y sí, llamará a tu función de componente nuevamente, pero es como una cosa completamente diferente nueva que está sucediendo.
Así que vamos un poco más profundo en cómo funciona la creación y destrucción de cosas en JavaScript para que realmente podamos entender qué está pasando aquí. Comencemos con un caso simple donde creamos una función que registra una fecha. Así que si tenemos esta función de registrar fecha y cada vez que la ejecutamos, crea una nueva fecha, entonces si ejecutas esta función 99 veces, crearás una nueva fecha. Lo siento, si la ejecutas 100 veces, crearás una nueva fecha cada una de esas 100 veces. Ahora veamos esto un poco más de cerca. Digamos que tenemos una función diseñada para crear una nueva fecha y almacenamos el resultado de esa función en una variable y también vamos a ejecutarla las otras 99 veces y simplemente la vamos a ejecutar. Simplemente no vamos a almacenar la fecha. Así que todavía creamos 100 fechas, pero solo conservamos una de ellas y hablaremos sobre qué sucede con el resto de ellas más tarde, pero en esencia, la única con la que podemos hacer algo es la que almacenamos en la variable. El resto simplemente desaparece.
Así que ahora veamos, hacemos lo mismo, pero luego establecemos mi fecha en indefinido. Así que en este caso, creamos 100 fechas y no hacemos referencia a ninguna de esas fechas. Así que fueron creadas, pero en realidad ya no están sirviendo a ningún propósito en nuestro programa.
Ahora vamos un poco más allá porque React ahora está muy inclinado hacia el lado funcional. Vamos a crear una función que crea el registrador de fechas que acabamos de ver y devuelve la función. Así que si ejecutamos el creador de registrador de fechas 100 veces, ya sea que mantengamos una referencia a él o no, no creamos ninguna fecha. Creamos la función, pero no creamos ninguna fecha. Así que al ejecutar esta función, en realidad creamos 100 versiones de esta función, pero no nuevas fechas. Ahora cambiémoslo un poco de nuevo. Ahora vamos a crear nuestro creador de registrador de fechas para que cree una nueva fecha, y luego esa es la fecha que siempre será registrada por el registrador de fechas. Así que lo que va a pasar aquí es que creamos el registrador de fechas 2, y creará una nueva fecha, pero cada vez que ejecutes mi registrador de fechas, solo registrará esta fecha.
Comments