Voy a simplificarlo aún más aquí con fines de demostración, pero todo comienza con señales como vimos. Y en su núcleo, simplemente ves una señal como un par de funciones getter y setter que cierran sobre un valor. Por supuesto, hay un poco más que eso. Y para eso, vamos a necesitar una suscripción.
Entonces actualicemos nuestras señales, hagamos un poco más. Ahora, al leer, lo que queremos hacer es verificar si hay un observador actual. Y si lo hay, lo agregaremos a un nuevo conjunto de suscriptores que creamos cuando creamos nuestra señal. Al escribir, actualizamos nuestro valor aún, pero ahora realmente iteramos sobre esos suscriptores y los llamamos para notificarles básicamente que algo ha cambiado. Y ese algo que debe ser notificado son nuestros efectos, que son el otro lado de nuestra ecuación.
Aquí puedes ver la implementación para obtener el observador actual. Lo que tenemos es una pila. Este contexto es solo una matriz, contexto global. Y simplemente tomamos lo que está en la parte superior de la matriz para ver qué se está ejecutando actualmente. Para nuestro efecto en sí, cuando se crea, se ejecuta de inmediato. Y luego pasa por el ciclo de limpiar las dependencias o suscripciones, se empuja a sí mismo en esa pila, para que cuando ejecutemos la función proporcionada, esté allí y se pueda agregar a las suscripciones. Y finalmente, se desapila a sí mismo. Voy a poner el código lado a lado, para que puedas ver esto mejor a medida que revisamos nuestro ejemplo. Básicamente, creamos nuestra señal, como nuestra señal de nombre, y devuelve nuestras funciones de lectura y escritura. Luego creamos nuestro efecto. Se ejecuta, se empuja a sí mismo en esa pila. Luego se ejecuta la función y lee desde nuestra señal de nombre, momento en el que ve el observador actual, que es ese efecto, y lo agrega a sus suscriptores. Luego lo registra en la consola y el efecto termina de ejecutarse, desapilándose a sí mismo. En algún momento posterior, se actualiza nuestra señal, lo que establece el nuevo valor y luego ejecuta nuestra lista de suscriptores. En este caso, es ese efecto, que lo ejecuta nuevamente, limpiando las dependencias y simplemente comenzamos todo el ciclo nuevamente. Y eso es realmente todo. A partir de ahí, podemos construir una base para otras primitivas. Muchas de ellas no son esenciales. Se pueden usar según sea necesario, pero un ejemplo de algunas importantes que se incluyen en Solid son createMemo, que se puede usar para almacenar en caché cálculos costosos, createStore, que es un proxy que permite la reactividad profunda anidada, y createResource, que es nuestra primitiva de primera parte para la obtención de datos y suspense. Pero basta de reactividad por ahora. Volvamos a nuestro ejemplo.
Comments