Hola a todos. Soy Julian, y sí, quiero hablar sobre señales. Ahora, las señales de JavaScript han tenido su buena cuota de atención y entusiasmo en los últimos años. Especialmente en combinación con la propuesta actual de TC39, creo que se vuelve cada vez más importante para la gente entender qué son las señales, cómo funcionan y qué problemas están tratando de resolver. Pero las señales también han sido parte de, digamos, conversaciones menos positivas y discusiones, especialmente en el ecosistema de React en torno a React y su no uso de señales. Así que quiero tocar ese tema. ¿Por qué React no usa señales, qué está haciendo en su lugar, pero también por qué creo que como desarrollador de React, deberías seguir la propuesta de TC39, y personalmente todavía estoy entusiasmado con ella. Ahora, esta no va a ser una charla sobre cómo las señales son correctas, y si no estás usando señales, estás equivocado, o viceversa, como React es correcto, y si estás usando señales, estás equivocado. Para mí, esto no es una situación de correcto o incorrecto. Así que mi charla realmente apunta más a tratar de dar a todos información sobre señales y cómo funcionan, para que, con suerte, puedan irse y tomar decisiones más informadas por sí mismos y tener discusiones más informadas. Pero también, y quizás más importante, quiero resaltar los dos diferentes paradigmas que han evolucionado en el ecosistema de JavaScript y cómo llegamos allí. Así que con todo eso fuera del camino, vamos a sumergirnos directamente en ello y hablemos de señales.
¿Qué son las señales? Comencemos allí, solo para que todos estemos en la misma página. Las señales son la idea de variables reactivas en JavaScript, y lo que eso significa es que podemos ver un ejemplo muy simple. Tenemos tres variables aquí, el contador, y luego dos valores derivados. Así que isEven se deriva del contador y es verdadero o falso, y parity se deriva de isEven y simplemente lo convierte en cadena, par o impar. Ahora, cada vez que reasigno el contador, lo cual puedo hacer porque es solo una variable mutable, tengo que recordar reasignar y recalcular todos esos valores derivados, y eso obviamente no es genial y es tedioso, y la idea de las variables reactivas es que no tengo que hacer eso. Así que imaginemos un mundo, esto no es JavaScript real, esto es un experimento mental y no tiene nada que ver con la propuesta de señales todavía, pero imaginemos un mundo donde tuviéramos un nuevo operador de asignación. Así que elegí el dólar igual en lugar del igual normal, y ese nuevo operador de asignación le diría al compilador que estas son variables reactivas. Así que lo usamos para isEven en parity aquí, el contador puede permanecer igual, y lo que le estamos diciendo al compilador es, oye, por favor, cada vez que cualquier variable que usemos en nuestro cálculo, cada vez que cualquiera de esas cambie, por favor recalcula automáticamente esta variable. Eso significa que si cambiamos el contador, no tenemos que hacer nada más porque la recalculación mágicamente ya sucede a través del compilador. Ahora, esta es la idea central detrás de las señales. ¿Por qué querríamos eso?
La mayoría de lo que hacemos como desarrolladores front-end es lidiar con el estado y convertir ese estado en UI. Ahora, cuando comencé a desarrollar hace bastante tiempo, el paradigma principal alrededor de eso era modelo vista controlador o MVC, y la idea era que tu vista siempre debería ser una función pura del modelo. En términos más modernos, puedes decir que tu UI siempre debería ser el resultado de una función pura de tu estado. Eso probablemente suena familiar, y la parte pura es realmente importante aquí porque básicamente lo que queremos es que si ponemos el mismo estado, siempre queremos obtener la misma UI de ello. Simplemente lo hace muy determinista y fácil de manejar. Ahora, ¿cómo pasamos de eso a señales, que suena más a efectos secundarios? Para entender eso, tenemos que echar un vistazo rápido a la historia de la reactividad en la web. Nuevamente, tenemos que comenzar desde el principio. Comenzamos con HTML y algún tipo de lenguaje de subconjunto.
Comments