Recoil es una biblioteca de gestión de estado desarrollada por Facebook, diseñada para aplicaciones React. Se considera una alternativa a Redux, especialmente cuando se requiere manejar estados complejos o de alto rendimiento en aplicaciones React. Recoil permite manejar estados atomizados que pueden actualizarse de manera eficiente, ofreciendo ventajas en situaciones donde Redux podría resultar limitante.
Recoil se diferencia de Redux en que maneja el estado en forma de 'átomos', pequeñas unidades de estado que pueden ser actualizadas de manera independiente. Esto contrasta con Redux donde el estado se maneja en un único store grande. Además, Recoil soporta selectores con dependencias dinámicas, lo que permite una reevaluación más eficiente del estado.
La versión 0.2 de Recoil introdujo mejoras significativas como una nueva implementación de selectores que es más robusta y eficiente, especialmente cuando se manejan miles de átomos. También se mejoró el rendimiento gracias a la introducción de una nueva estructura de datos que optimiza la gestión de grandes cantidades de átomos.
Recoil aún se considera un proyecto experimental por Facebook, aunque es activamente usado y mantenido. Ha sido incorporado en varias aplicaciones dentro de Facebook, lo que implica una dependencia continua y soporte probable. Sin embargo, se recomienda evaluar cuidadosamente su uso en producción dado que no tiene el mismo nivel de soporte que bibliotecas como React.
Para empezar con Recoil, puedes visitar el sitio oficial recoiljs.org donde encontrarás la documentación completa, ejemplos y recursos adicionales. También hay tutoriales en línea y videos que pueden ayudar a entender cómo implementar Recoil en tus proyectos de React.
Sí, Recoil es compatible con React Native. Aunque no es ampliamente usado en ese entorno por los desarrolladores de Facebook, la comunidad ha contribuido a su compatibilidad y es parte de las pruebas habituales para asegurar que funcione correctamente en React Native.
Recoil.js es una biblioteca de gestión de estado desarrollada por Facebook que permite actualizar átomos separados de forma independiente. Proporciona herramientas de análisis de rendimiento basadas en múltiples mediciones tomadas de la producción y agregadas en distribuciones estadísticas. Recoil 0.2 introdujo mejoras en selectores y rendimiento, así como una estructura de datos que mejora la eficiencia de copia. Recoil admite renderizado en el lado del servidor y se puede utilizar en React Native. Se recomienda comenzar con React solo y considerar agregar Recoil si es necesario para manejar actualizaciones en partes distantes del árbol.
Gracias por recibirme. Estoy emocionado de charlar. Acabo de mudarme a Praga y el clima aquí es mucho mejor. Estaba escuchando tu charla sobre Recoil.js. ¿Puedes contarnos sobre ti y tu trabajo en Facebook?
Muchas gracias por recibirme. Definitivamente es emocionante poder charlar. Lamento que el lugar donde me hospedo no tenga una chimenea. Tendremos que fingir. Sí, acabo de mudarme a Praga ahora porque estuve durante las vacaciones en Rumania y ahora estoy en Praga. Pero aquí es mucho mejor. Debo decir que el clima es mucho mejor. Estoy muy contento de tenerte aquí. Estaba escuchando tu charla sobre Recoil.js y es muy interesante. Quiero decir, hay tantas soluciones de gestión de estado disponibles, ¿verdad? Pero Recoil, ya que viene de Facebook y especialmente de ti, es realmente genial verlo. Pero antes de cualquier cosa, ¿podrías darnos algunos detalles sobre quién eres, qué haces y cuál es tu trabajo diario básicamente?
2. El trabajo de Dave McCabe en herramientas de análisis de rendimiento
Short description:
He trabajado en Facebook durante algunos años, enfocándome en herramientas de análisis de rendimiento. Construyo herramientas basadas en múltiples mediciones tomadas de la producción y agregadas en distribuciones estadísticas. Estas herramientas permiten realizar diferentes análisis para determinar las variables que afectan el rendimiento de la aplicación.
Claro. Mi nombre es Dave McCabe. He trabajado en Facebook durante algunos años y la mayor parte del trabajo se ha centrado en herramientas de análisis de rendimiento. Probablemente, la mayoría de ustedes ha utilizado el perfilador en su navegador, donde se mide qué está consumiendo tanto tiempo y por qué las cosas son lentas y dónde se está ejecutando el código y cosas así. Paso mucho tiempo construyendo herramientas como esa, pero no solo toman una sola medición. Se basan en muchas, muchas mediciones diferentes que se han tomado de la producción y luego se agregan. Así que si puedes imaginar un perfilador así, pero todo lo que ves es una distribución estadística en lugar de una sola medición. Y puedes hacer diferentes
QnA
Estado de Recoil y Comparación con Redux
Short description:
Puedes realizar diferentes análisis basados en las variables que podrían afectar el rendimiento de tu aplicación. Recoil fue extraído de una aplicación con necesidades específicas y convertido en una biblioteca separada. Si estás buscando reemplazar Redux, considera usar solo React o React junto con Relay primero. Recoil se mantiene activamente, con mejoras recientes y más por venir. Se utiliza en muchas cosas dentro de Facebook, pero aún se considera un proyecto experimental.
Puedes realizar diferentes análisis basados en las variables que podrían afectar el rendimiento de tu aplicación. Así que ya sea el tipo de dispositivo que alguien está usando o cosas sobre el usuario, tal vez algo que tenga muchos amigos, ya sabes, diferentes tipos de cosas como esas, o si se ve afectado por un cambio de código, cambio de configuración. Pasé bastante tiempo construyendo cosas como esa y Recoil fue extraído de una aplicación que tenía ciertas necesidades bastante específicas. Y decidimos separarlo y convertirlo en una biblioteca separada. Wow. Así que, muchas cosas. No diré nada sobre mí ahora. Me gustaría simplemente apagar la cámara y fingir eso. ¿Por qué dices eso? No lo sé. No tengo eso. Genial. Entonces, como no veo ninguna pregunta en el discurso, si alguien tiene alguna pregunta, simplemente diríjase a ellas y las discutiremos. Pero tengo algunas preguntas preparadas. OK, genial. Y la primera es que vi un par de veces en Twitter, especialmente lo siguiente. ¿Esto está destinado a reemplazar Redux? Yo diría que tu primera opción si estás buscando reemplazar Redux es ver si puedes hacer lo que necesitas solo con React o con React y Relay. Y en realidad hay muchas ventajas en eso si no tienes un sistema separado. Pero diría que si estás alcanzando ciertos límites de rendimiento con eso en situaciones particulares que podemos discutir con Redux, entonces Recoil podría ser una buena opción para ti. Genial. Ahora veo una pregunta que viene de Jordi, pero también vino antes de BKG. Ellos están diciendo cuál es el estado de Recoil. Parece que todavía está en beta. Parece que resolvería nuestros problemas, pero es difícil convencer a otros porque es un producto beta. ¿Cuáles son tus pensamientos al respecto? Sí. Se mantiene activamente. De hecho, acabamos de lanzar una versión hace aproximadamente una semana que tiene algunas mejoras realmente buenas y hay más en camino. Se utiliza en muchas cosas diferentes dentro de Facebook, así que definitivamente dependemos de ello. No va a desaparecer. Pero lo consideramos un proyecto experimental porque no es algo en lo que la empresa diga, lo respaldamos totalmente. Esto es lo que todos deberían usar, lo cual es el caso, por ejemplo, con React. React tiene un estándar de calidad muy, muy alto y debería funcionar para prácticamente cualquier aplicación que quieras escribir, creemos que deberías hacerlo con React.
Actualizaciones de Recoil e Implementación de Selectores
Short description:
Recoil es algo que podría ser útil. Recoil se actualizó a la versión 0.2, con mejoras en selectores y rendimiento. Los selectores en Recoil pueden tener dependencias dinámicas, lo que permite un flujo de datos flexible. La forma básica de implementar selectores es tener una caché de dependencias y sus valores correspondientes.
Lo mismo ocurre con Relay. Recoil es algo que podría ser útil y si te resulta útil, entonces estamos muy contentos de ponerlo a disposición. Pero su futuro a largo plazo es incierto.
Muy bien. Sí. Quiero decir, puedo ver Recoil y decir que definitivamente es la respuesta, con mayúscula T, mayúscula F, ¿sabes a lo que me refiero?
En cuanto a esas pequeñas actualizaciones, vi recientemente que Recoil se actualizó a la versión 0.2, ¿verdad? Mm-hmm. ¿Podrías contarnos más sobre las mejoras que hicieron ustedes o tú hiciste en general y qué errores se corrigieron en general? Sí. Claro. Las dos principales mejoras en la versión 0.2 fueron una nueva implementación de selectores que es mucho más robusta y soluciona varios errores que probablemente la mayoría de las personas no habrían encontrado, pero que podrían haber encontrado. Y luego es mucho más rápido si tienes un número muy grande de átomos. Entonces, si tienes miles, decenas de miles de átomos, se ralentizaría. Y ahora eso debería ser mucho mejor, lo cual realmente usamos en ciertas aplicaciones que usan Recoil. Tendremos, digamos que tienes un documento y cada elemento en el documento está representado por un átomo, ¿verdad? Ese es el tipo de cosa para la que está diseñado y que ahora funciona mucho mejor.
En cuanto a los selectores, algo único de los selectores de Recoil es que pueden tener dependencias dinámicas. Cada vez que ejecutas el selector, no es que haya declarado estáticamente un conjunto de otros átomos o selectores de los que depende. Y solo para retroceder un poco, si las personas no están familiarizadas con esto. Un selector, la forma en que lo entendemos es como una función, es una función pura de algún otro estado que simplemente tiene información sobre qué estado necesita para que cuando ese estado cambie, esa función se reevalúe. Así que, como los componentes pueden suscribirse al estado, pero también pueden suscribirse a una función de estado, si eso tiene sentido. Entonces terminas con este gráfico, este, como un gráfico de flujo de datos, y las cosas fluyen desde el estado hacia abajo a través de estas funciones y en los componentes. Y la mayoría de las cosas que hacen algo así, la forma de ese gráfico se conoce de antemano. Pero en Recoil, puede cambiar. Es una función, técnicamente, del estado, así que no es, como, caos. En un estado dado, el gráfico tendrá una forma particular. Descubres eso evaluando los selectores, y luego cuando se ejecutan, pueden decir, necesito este data, necesito este data. Pero eso puede ser condicional. Entonces, en un estado, se suscribe a algún data, y en un estado diferente, no lo hace. Hasta ahora, todo bien. La forma básica en que querrías implementar selectores es que, como, si estuvieras, ya sabes, sentado, pensando cómo hacer esto, tendrías una caché donde las entradas son, como, conjuntos de dependencias. Estas fueron mis dependencias, estaban en este estado, así que aquí está el valor que obtuve.
Dependencias Dinámicas y Ejecución de Selectores
Short description:
Las dependencias dinámicas en los selectores pueden causar problemas con la ejecución asíncrona. Recoil separa la ejecución de un selector del valor evaluado en un estado y tiempo específicos. Esto soluciona casos especiales con selectores asíncronos, convirtiéndolo en una característica robusta.
Eso no funciona realmente si tienes dependencias dinámicas, porque una evaluación particular de un selector, si es asíncrono, el conjunto de dependencias que tiene, y por lo tanto la clave de caché que debería tener, en realidad cambiará durante la ejecución asíncrona de ese selector. Y básicamente es solo este gran rediseño de todos esos conceptos. Tienes la ejecución de un selector y luego tienes el valor que se ha evaluado para un estado particular en un momento particular. Y esas son dos cosas diferentes.
En realidad, suceden muchas cosas. El resultado de eso es simplemente que había muchos casos especiales que podían ocurrir con selectores asíncronos que ahora están solucionados. Así que eso debería ser una característica realmente robusta.
Selectors and State Separation
Short description:
Recoil se basa en la idea de separar el estado en átomos individuales. A diferencia de Redux, donde todo el estado se almacena en una sola unidad, Recoil permite átomos separados que se pueden actualizar de forma independiente. Sin embargo, al usar selectores, es importante tener en cuenta que todos los selectores se evalúan cada vez que cambia cualquier estado. Para evitar actualizaciones innecesarias, se recomienda dividir el estado en piezas más pequeñas y usar la API de Recoil para actualizarlas juntas como una sola unidad.
OK. Entonces, en relación con los selectores, Jyrock94 hizo una pregunta: ¿hay patrones o problemas comunes al crear selectores que puedan causar una disminución del rendimiento o renderizaciones innecesarias? Sí. Creo que lo principal a tener en cuenta es que Recoil se basa en la idea de que separemos nuestro estado en pequeños átomos individuales, a diferencia de si lo estuviéramos pensando de la manera en que podríamos hacerlo en Redux u otros sistemas, donde tenemos un gran almacén negro con todo nuestro estado en él. Es una unidad y se actualiza atómicamente. Luego tenemos selectores que extraen pequeñas partes, como esta parte que va a ser utilizada por este componente. Esta parte que va a ser utilizada por este componente. Entonces los están seleccionando. ¿De acuerdo? Ese enfoque eventualmente alcanza un límite de escalabilidad porque, en los selectores, cada vez que cambia cualquier estado, debes evaluar todos esos selectores nuevamente para ver si las cosas que están aguas abajo de ellos necesitan actualizarse. Por lo tanto, no quieres encontrarte en una situación así, y Recoil no optimiza eso en absoluto, si eso es lo que estás intentando hacer. Por lo tanto, no se saldrá temprano si tienes un selector cuyo valor no cambia. Entonces, la forma en que debes hacerlo en Recoil es tomar las cosas en tu estado que se actualizarían de forma independiente y separarlas en diferentes átomos. Eso es lo principal con lo que veo que la gente se encuentra. Por lo tanto, debes dividir el estado en piezas pequeñas y Recoil te proporciona una API que te permitirá actualizarlas juntas como una sola unidad.
Actualización de Recoil y Mejora de Rendimiento
Short description:
Recoil 0.2 introdujo el paquete hash array map tree plus, que mejora el rendimiento al implementar una estructura de datos que permite copiar segmentos de manera eficiente en lugar de copiar toda la estructura. Esto es especialmente útil para un gran número de átomos. Es interesante destacar que este enfoque tiene similitudes con las estructuras de datos persistentes utilizadas en Clojure script. Estas bibliotecas de terceros, como Baobab JS, ofrecen implementaciones valiosas que contribuyen al éxito de Recoil y otras bibliotecas.
Genial, tengo otra pregunta sobre la nueva actualización. Recoil anteriormente no tenía dependencias, ¿verdad? No había dependencias de terceros y en la versión 0.2 se agregó el paquete hash array map tree plus. ¿Podrías ampliar eso? ¿Cuál es su propósito y por qué ayuda?
Correcto, eso se remonta a lo que dije, hay dos cambios en la versión 0.2, hablé del primero. El segundo es simplemente la mejora del rendimiento. Y eso se debe a tener una estructura de datos que te permite hacer algo similar a una copia, como si estuvieras tomando un mapa grande o un conjunto grande y copiándolo, pero sin tener que hacerlo realmente. Porque eso eventualmente te ralentizará mucho si solo estás tomando un mapa incorporado o algo así y copiándolo. Y por lo tanto, esa biblioteca implementa una estructura de datos que te permite, básicamente, si piensas en esto, probablemente sea más fácil con imágenes y si buscas en Google como árboles hash, verás esto, pero básicamente lo que quieres hacer es dividir tu estructura en segmentos que están en un árbol. Y si quieres una nueva copia de todo el árbol, solo necesitas copiar el segmento donde ocurren los cambios y todos los nodos que apuntan a eso. Esa es la idea básica. Y todo lo demás, tienes un nuevo árbol, pero en su mayoría se reduce a la misma estructura de nivel base. Y eso es lo que implementa. Y sí, es solo para mejorar el rendimiento. Si tienes un número muy grande de átomos.
Esto me recuerda en el pasado, estaba mirando Baobab JS, que es, ¿estás familiarizado con Baobab? No creo que lo esté. ¿Por qué no hablas un poco al respecto? Como el árbol. Sí, exactamente. Se basa en índices y sí, es básicamente, es como un árbol, ¿verdad? Y tienes hojas y cada vez que algo se actualiza, se propaga hacia abajo. Entonces, quien esté escuchando esos cambios recibirá una actualización. Pero es genial ver y tan valiosas bibliotecas de terceros, que son realmente pequeñas en tamaño y que pueden hacer tantas cosas buenas para Recoil y también para otras bibliotecas. Porque es una implementación.
Sí, sabes, muchas de estas cosas surgieron de la, creo que fue la comunidad de Clojure, Clojure era un lenguaje de programación j, realmente innovó mucho en torno a estas estructuras de datos persistentes y cómo usarlas en la práctica, muchas de ellas, ya sabes, si miras Recoil, definitivamente verás una similitud con algunas de las cosas que existen en Clojure script y cosas así. Y es realmente genial ver que eso se está adoptando en JavaScript, que las personas están descubriendo cómo usar esas cosas. Por supuesto, el lenguaje no permite implementar estructuras de datos como esas, si la eficiencia total de las que están implementadas dentro de la VM. Pero para ciertas aplicaciones definitivamente tienen mucho valor. Así que es genial ver que eso se está adoptando. Sí, pulgares arriba para eso.
Ventaja de React Context Provider sobre Recoil
Short description:
En comparación con Recoil, el uso de React y un proveedor de contexto de React puede manejar eficientemente datos compartidos dentro de un árbol. Tiene un mínimo sobrecarga y garantiza la compatibilidad con futuras características de React. Sin embargo, las ventajas específicas pueden depender del contexto y la comunicación entre componentes.
Tengo otra pregunta de René. ¿Cuál es la ventaja sobre el proveedor de contexto de React? ¿En comparación con qué? En comparación con Recoil, por supuesto. Bueno, creo que, para la mayoría de las cosas, para la mayoría de las aplicaciones no necesitas involucrar otra biblioteca. Por lo tanto, puedes hacerlo simplemente con React y un proveedor de contexto de React, que te permite tener algunos datos que se comparten dentro de todo un árbol y que son manejados eficientemente por React. No hay mucha sobrecarga en hacer eso. Y luego, funcionará con diferentes características futuras de React. Por ejemplo, si observas las cosas que están por venir en React, como los componentes del servidor, ese tipo de cosas. Si estás utilizando las características incorporadas de React, tienes garantizada la compatibilidad con las nuevas características que se lancen. Si estás utilizando alguna otra biblioteca, incluido Recoil, puede que sea compatible o no. Entonces, me pregunto si tienen algo más específico en mente con su pregunta, pero eso es lo que me viene a la mente. Sí, esperaremos a que René agregue más detalles. Pero sí, es más como la comunicación entre componentes. Estamos esperando que él agregue más detalles, tal vez.
Server-side Rendering and Atom Unloading
Short description:
Recoil admite el renderizado en el lado del servidor (SSR) a través de la API de estado inicializado. Puedes eliminar manualmente los átomos utilizando el gancho useResetRecoilState, pero hay cambios próximos para liberar automáticamente los átomos. Recoil.js se utiliza mejor cuando tienes múltiples piezas de estado que afectan a hojas distantes en tu árbol de React.
Otra pregunta que surgió dos veces, en realidad, fue sobre el estado del renderizado en el lado del servidor en Recoil. Guido realmente hizo esta pregunta y Buhtargac, espero no haberlo escrito mal. ¿Puedes agregar algo sobre SSR? Sí, lo admitimos. En realidad, no tengo conocimiento, no he escuchado a nadie que lo esté utilizando, pero de vez en cuando recibimos informes de errores en ese escenario, así que supongo que la gente lo está utilizando y tratamos de solucionar esos errores. Básicamente, Recoil proporciona una API que probablemente quieras usar si estás haciendo esto llamada estado inicializado, que es una propiedad de la ruta de Recoil. Y cuando la usas, utiliza ese estado en la primera renderización. Y eso es lo que se utilizará para SSR. Genial. Otra pregunta de JROK94, ¿puedes descargar átomos? Si estás creando átomos dinámicamente por id y ya no necesitas ninguno de ellos, ¿quedan atrapados en la memoria? Antes de que respondas, en realidad fui a la documentación de recoil.js y mencionas allí que es algo en lo que vas a trabajar en el futuro, pero tal vez puedas decir más al respecto. Sí, actualmente, puedes hacer eso eliminándolos manualmente con un gancho llamado useResetRecoilState. Eso eliminará ese valor. Es como restablecerlo, pero en realidad lo estás eliminando, restableciéndolo al valor predeterminado. Y eso es lo que puedes hacer en este momento. Y luego tenemos algunos cambios que saldrán pronto, con suerte, que liberarán automáticamente los átomos. Optarás por ello en función de cada átomo. Dirás, quiero que este átomo se recolecte como basura, básicamente. Y cuando no esté siendo utilizado por ningún componente, se eliminará. Y estamos utilizando eso internamente. Y esperamos lanzarlo como código abierto muy pronto. Hay un ligero cambio en la API. Así que habrá una versión en la que recibirás una advertencia de que necesitas cambiar algo. Y luego otra versión donde esa característica estará activada. Un cambio realmente pequeño, no debería afectar a la mayoría de las aplicaciones en realidad.
Increíble. Otra pregunta es, ¿dónde puedo usar recoil.js? Y en tu opinión, ¿cuál es el mejor caso de uso? Si puedes expandir un poco más sobre eso también. Claro. Básicamente, quieres usarlo en situaciones donde tienes un montón de diferentes piezas de estado. No un número fijo, sino un número variable de diferentes piezas de estado que afectan a hojas distantes en tu árbol de React. Así que el árbol, la suposición básica en React es que la mayoría de las actualizaciones van a ser pequeñas o grandes. Ya sea que estés actualizando un botón porque hiciste clic en ese botón, o que vayas a una pantalla diferente y tengas que volver a renderizar todo.
Handling Updates in React and Recoil
Short description:
En la mayoría de las aplicaciones, React maneja eficientemente las actualizaciones en la mayoría de los casos. Sin embargo, cuando tienes actualizaciones frecuentes en partes distantes del árbol, las actualizaciones basadas en suscripción desde un estado fuera del árbol pueden ser más adecuadas. Comienza construyendo solo con React y considera agregar Recoil si es necesario.
En la mayoría de las aplicaciones, la mayoría de las actualizaciones se encuentran en esas dos categorías, y ambas son manejadas de manera muy eficiente por React. Donde no funciona tan bien es cuando tienes cosas que se actualizan rápidamente, pero están en partes distantes del árbol. Porque no es todo el árbol. No es una parte, sino que está aquí y allá. Ahí es donde quieres ese tipo de actualizaciones más basadas en suscripción desde algún estado que no está en una parte específica de tu árbol. Entonces puedes usarlo en situaciones como esa si lo necesitas. Pero realmente te sugiero que intentes construir solo con React y veas hasta dónde llegas. Y luego puedes agregar Recoil como un ingrediente adicional si alcanzas un límite.
Relay, Refreshing Async Selectors, and Recoil
Short description:
Relay, otra biblioteca de Facebook, tiene la capacidad única de analizar un árbol de componentes de React y consolidar los datos requeridos en una sola consulta. Permite cargar la consulta mientras el cliente aún está descargando JavaScript, lo que resulta en un rendimiento más rápido. Al actualizar selectores asíncronos, se recomienda utilizar un átomo de ID de solicitud. Esto mantiene el concepto de selectores como funciones puras del estado. En el pasado, React tenía limitaciones con las mezclas y la falta de una API de contexto. Sin embargo, con la introducción de Flux, Redux y ahora Recoil, la gestión del estado se ha vuelto más eficiente y prometedora. La API de Recoil es fácil de usar y proporciona una solución integral para gestionar el estado en aplicaciones de React.
Otra cosa que podrías considerar y que me sorprende que no sea más popular en el código abierto es Relay, otra biblioteca de Facebook que utilizamos mucho en Facebook. Tiene un poder realmente único, que es la capacidad de analizar un árbol de componentes de React y ver qué datos van a necesitar antes de ejecutarse, y consolidar todos esos datos en una sola consulta. Y luego puedes comenzar a cargar esa consulta mientras el cliente aún está descargando tu JavaScript. Así que antes de que el cliente tenga el código para ejecutar, para saber que debe ejecutar la consulta, ya estás calculando esa consulta, ya sabes, consultando la base de datos con ella. Y, obviamente, no puedes ser más rápido que eso. Así que si estás cargando datos y estás pensando en utilizar los selectores asíncronos en Recoil para hacerlo, verifica primero si puedes hacerlo con Relay, porque si puedes, definitivamente siempre será más rápido.
Increíble. Gracias por el consejo. Estoy seguro de que quien esté escuchando ahora y en el futuro, también echará un vistazo a Relay. Tengo otra pregunta del Sr. Oz. ¿Hay una mejor manera de actualizar los selectores asíncronos que utilizando un átomo de ID de solicitud, como el ID de solicitud? Es el ID de solicitud más uno, que devuelve el ID de solicitud más uno. Esa es exactamente la forma en que lo haría. Si eso es lo contrario, puedes tomar todo ese patrón y envolverlo en algo que los genere por ti. Creo que en realidad tenemos uno de esos. No estoy seguro si es de código abierto, pero es muy fácil. Puedes escribir eso una vez y esa es la forma de hacerlo porque eso mantiene el concepto de que un selector es una función pura de algún estado. Cuando entras en cosas, como si vas a hacer depuración en viaje en el tiempo, o algo así, o simplemente mirar el sistema, todo es una función pura. No varía con el tiempo. Estás modelando explícitamente en el tiempo, pero eso es parte de tu modelo explícito que puedes manipular. ¿Tiene sentido?
Sí, recuerdo cuando comencé con React, que fue hace casi ocho años, había mezclas, no había una API de contexto. Solía haber una API de contexto, que estaba oculta de alguna manera, y tenías que profundizar mucho en los entresijos de React. Pero recuerdo que teníamos un árbol tan grande que al final, teníamos tantas propiedades que estábamos enviando por el camino y básicamente cascándolas. Y teníamos tantas actualizaciones innecesarias porque estaba en medio del árbol, el componente era básicamente solo un proxy para esas propiedades, porque estábamos usando la metodología HATEOAS, que es básicamente como un explorador de API, por lo que una respuesta de API te dará más puntos finales donde puedes obtener más datos basados en el recurso actual. Básicamente, piensa en HATEEOAS como una API de puntos finales de usuario que te dará URLs de usuario 1, 2, 3 que puedes obtener hacia adelante. Así que básicamente tenemos una representación de la API mediante componentes de React. Y recuerdo que todo no era tan eficiente, por lo que teníamos que hacer trucos de actualización de componentes y pasar de alguna manera el estado del estado global, pero luego, por supuesto, aparecieron Flux y Redux, y esta solución de gestión de estado, y hoy en día es Recoil, que parece muy prometedor. Es muy fácil de usar. Simplemente fui a la documentación y pude entender casi todo fácilmente, no los detalles internos aún, pero la API general parecía muy fácil de entender.
Recoil en React Native y Reescritura de Aplicaciones
Short description:
React cambió la forma en que pensamos sobre las interfaces de usuario, lo que llevó a una explosión de ideas. Recoil se puede utilizar en React Native, aunque no se utiliza internamente en Facebook. Es genial saber que eres fan de React Native. Reescribir una aplicación grande es un desafío, por lo que es importante medir si Recoil funciona para tu caso de uso específico.
Hablando de cómo empezar. Sí, claro. Solo quería decir gracias por eso, y me alegra saber que te resulta fácil. Ha sido muy interesante ver desde React, React realmente cambió la forma en que uno piensa sobre las interfaces de usuario. Había un paradigma que se estableció básicamente en la década de 1970 con el Xerox stuff, orientado a objetos, toda esa forma de ver las cosas que se mantuvo hasta que se inventó React, y ahora hay esta explosión de personas que descubren cómo usar efectivamente el nuevo paradigma. Ha sido divertido ver todas las diferentes iteraciones de eso. ¿Qué ibas a decir? Como soy un gran fanático de React Native, ¿puedo ejecutar Recoil en un entorno de React Native? Sí. Es algo que no usamos, pero que está soportado. Así que, hay algunas personas en el código abierto que han contribuido a eso y están tratando de mantener eso para que funcione. Es parte de nuestras pruebas cuando lanzamos. Nos aseguramos de que funcione en React Native y ese tipo de cosas. Entonces, en teoría, sí, debería funcionar sin problemas en React Native. Así que, me alegra saber que también estás utilizando esa tecnología.
Sí, soy un gran fanático. De hecho, tuve acceso a ella desde que estaba en privado porque tuve la suerte de que alguien fuera a la conferencia de React.js cuando se anunció en 2016. Estoy jugando con ella desde entonces. Realmente me encanta. De hecho, también la estamos usando en Skype. Así que, estamos utilizando React Native y Electron. Para la gestión del estado, tenemos nuestra propia solución que es de código abierto. Es diferente en comparación con Recoil. Pero, sí, esto es lo que nos funcionó. Y en la actualidad es bastante difícil revolucionar todo o reescribirlo todo, ¿verdad?
Sí, definitivamente. Porque es una aplicación bastante grande.
Sí. Y reescribir no es algo realmente bueno en general. Así que, sí.
Sí, requiere un esfuerzo enorme hacer eso.
Sí, exactamente. Entonces, ¿funciona? También necesitas hacer algunas mediciones. ¿Funciona o no? Sí.
Getting Started with Recoil and Production Usage
Short description:
Si estás buscando comenzar con Recoil, puedes encontrar documentación y videos útiles en recoiljs.org. También hay un desarrollador que ha creado learnrecoil.com, donde puedes aprender todo lo que necesitas saber sobre Recoil e incluso recrear Excalibur utilizando Recoil. En cuanto al uso de Recoil en producción, es importante evaluar los beneficios y riesgos para tu aplicación específica. Aunque es un proyecto experimental, es utilizado activamente por Facebook y probablemente seguirá siendo compatible. Es tranquilizador saber que los proyectos de código abierto de Facebook son utilizados en sus propias aplicaciones, incluso en una capacidad experimental.
Hablando de cómo empezar, tal vez haya personas que nos están viendo y les gustaría comenzar o empezar con Recoil. ¿Tienes algún ejemplo o buenas prácticas que las personas puedan seguir o consultar?
Sí, bueno, hay un sitio web. Si vas a recoiljs.org, hay documentación allí. Luego, si haces clic en enlaces externos, en la sección de ese sitio web, hay un enlace a algunos videos que alguien ha creado en realidad, que son de muy buena calidad y te guían a través de cómo hacer una aplicación de dibujo con Recoil y creo que eso es una buena introducción para usarlo. Recientemente descubrí learnrecoil.com. Sí, hay un desarrollador que está, y todo es gratuito. Él está cubriendo todo lo que necesitas saber sobre Recoil y está tratando de recrear Excalibur utilizando Recoil. Creo que eso es probablemente lo mismo a lo que me refería. Así que eso está vinculado desde el sitio web de Recoil. Exactamente. Y sí, parece un trabajo realmente bueno.
Veamos si tenemos alguna otra pregunta. Pasando a Basecamp, Preguntas y Respuestas. Otra pregunta de Dry's Capone. Creo que lo discutimos, pero solo para resumir esto, ¿deberíamos preocuparnos por la bandera experimental? ¿Se puede usar Recoil en producción? Creo que debes evaluar los beneficios y riesgos para tu aplicación en particular. No es como si fuera a desaparecer. Necesitas usar el código que está disponible. Lo usamos mucho internamente. Proporcionalmente, porque Facebook es tan grande. Podría ser una fracción pequeña, pero aún así ser muchas aplicaciones diferentes. Pero lo usamos en muchos lugares, así que tenemos una dependencia de él y probablemente seguiremos brindando soporte. Pero no tiene el mismo nivel de soporte que algo como React. Así que supongo que no puedo dar una respuesta definitiva, pero eso es más o menos el estado actual. Hay muchas personas que trabajan en ello. Es un proyecto secundario para todos nosotros. Pero lo usamos en aplicaciones que necesitamos mantener en funcionamiento, así que no desaparecerá en el futuro previsible. Sí, es realmente bueno ver que todo lo que es de código abierto por Facebook, en realidad se utiliza dentro de una aplicación de Facebook. Y esto significa mucho porque aunque sea experimental, se utiliza en producción de todos modos, aunque se pruebe con A/B y cosas así, pero es algo que está en el mundo real, como solían decir los desarrolladores. Otra pregunta vino de M. Botis.
Recommending Recoil for Beginners
Short description:
Si estás comenzando con React, simplemente usa React y puedes llegar muy lejos. Para la mayoría de las aplicaciones, eso es todo lo que necesitas. No te preocupes por otros sistemas de gestión de estado como Redux o Recoil. Facebook.com está construido completamente con React. Si necesitas cargar datos de manera eficiente, puedes usar Relay. Solo considera Recoil si encuentras cuellos de botella de rendimiento que no se pueden resolver de otras formas.
¿Recomendarías Recoil para principiantes o les harías aprender los otros primero? Creo que por otros se refiere al estado de React. Correcto, bueno, sí. Creo que si estás comenzando con React, simplemente usa React y puedes llegar muy, muy lejos. Y para la mayoría de las aplicaciones, eso es todo lo que necesitas. Así que diría que no mires, no necesitas preocuparte por otros tipos de sistemas de gestión de estado, Redux, Recoil, todo eso. Estos son para cosas bastante especializadas. Si miras Facebook.com, todo está en React. Como sabes, puedes hacer una aplicación realmente, realmente compleja. Y en casi todos los casos, eso es todo lo que necesitas. Y luego, si necesitas cargar datos de manera eficiente desde el servidor, puedes agregar Relay. Y si te encuentras en un caso donde te encuentras con algunos, como cuellos de botella de rendimiento, y no puedes encontrar otra forma de resolverlo, entonces podrías considerar usar Recoil. Genial. Creo que tenemos tiempo para una pregunta más. Es de Mr. Woos. Nuevamente, ¿hay planes de incorporar Recoil en React DevTools? En realidad, estamos lanzando nuestras propias DevTools separadas. Para Recoil. Y creo que eso está en código abierto, pero aún no está en la Chrome Store, o como se llame, pero espero que pronto lo esté. Y es bastante genial, te permite ver el historial de todos tus estados de Recoil, y muestra un gráfico de cómo fluye tu datos a través de los selectores y cuáles están activos, cuáles se vuelven a evaluar con frecuencia. Así que puedes decir, oh, el selector, necesito dividirlo porque se está recalculando con frecuencia. Lo visualizará, pero será una cosa separada de DevTools, una extensión separada. Gracias. Bueno, Dave, fue, sí, me siento muy agradecido de tenerte aquí, discutiendo no cara a cara, sino de forma remota sobre Recoil. Muchas gracias por tomarte el tiempo y- Sí, bueno, gracias. Lo aprecio mucho. Se trata de- Sí, es realmente genial ver que la gente lo está usando y está interesada, y espero que podamos conocernos en persona en algún momento. Esperemos que sí, una vez que la pandemia- Subir a visitar. Exactamente. Muchas gracias, Dave. Muy bien, sí, gracias. Que tengas un maravilloso día. Adiós. Adiós.
This transcription provides a brief guide to React rendering behavior. It explains the process of rendering, comparing new and old elements, and the importance of pure rendering without side effects. It also covers topics such as batching and double rendering, optimizing rendering and using context and Redux in React. Overall, it offers valuable insights for developers looking to understand and optimize React rendering.
Remix is a web framework built on React Router that focuses on web fundamentals, accessibility, performance, and flexibility. It delivers real HTML and SEO benefits, and allows for automatic updating of meta tags and styles. It provides features like login functionality, session management, and error handling. Remix is a server-rendered framework that can enhance sites with JavaScript but doesn't require it for basic functionality. It aims to create quality HTML-driven documents and is flexible for use with different web technologies and stacks.
State management is not limited to complex applications and transitioning to a store offers significant benefits. Pinia is a centralized state management solution compatible with Vue 2 and Vue 3, providing advanced devtools support and extensibility with plugins. The core API of Pinia is similar to Vuex, but with a less verbose version of stores and powerful plugins. Pinia allows for easy state inspection, error handling, and testing. It is recommended to create one file per store for better organization and Pinia offers a more efficient performance compared to V-rex.
The Talk discusses React Forget, a compiler built at Meta that aims to optimize client-side React development. It explores the use of memoization to improve performance and the vision of Forget to automatically determine dependencies at build time. Forget is named with an F-word pun and has the potential to optimize server builds and enable dead code elimination. The team plans to make Forget open-source and is focused on ensuring its quality before release.
Today's Talk explores the use of the useEffect hook in React development, covering topics such as fetching data, handling race conditions and cleanup, and optimizing performance. It also discusses the correct use of useEffect in React 18, the distinction between Activity Effects and Action Effects, and the potential misuse of useEffect. The Talk highlights the benefits of using useQuery or SWR for data fetching, the problems with using useEffect for initializing global singletons, and the use of state machines for handling effects. The speaker also recommends exploring the beta React docs and using tools like the stately.ai editor for visualizing state machines.
Routing in React 18 brings a native app-like user experience and allows applications to transition between different environments. React Router and Next.js have different approaches to routing, with React Router using component-based routing and Next.js using file system-based routing. React server components provide the primitives to address the disadvantages of multipage applications while maintaining the same user experience. Improving navigation and routing in React involves including loading UI, pre-rendering parts of the screen, and using server components for more performant experiences. Next.js and Remix are moving towards a converging solution by combining component-based routing with file system routing.
Los primeros intentos de Ivan en la depuración de rendimiento fueron caóticos. Vería una interacción lenta, intentaría una optimización aleatoria, vería que no ayudaba, y seguiría intentando otras optimizaciones hasta que encontraba la correcta (o se rendía). En aquel entonces, Ivan no sabía cómo usar bien las herramientas de rendimiento. Haría una grabación en Chrome DevTools o React Profiler, la examinaría, intentaría hacer clic en cosas aleatorias, y luego la cerraría frustrado unos minutos después. Ahora, Ivan sabe exactamente dónde y qué buscar. Y en esta masterclass, Ivan te enseñará eso también. Así es como va a funcionar. Tomaremos una aplicación lenta → la depuraremos (usando herramientas como Chrome DevTools, React Profiler, y why-did-you-render) → identificaremos el cuello de botella → y luego repetiremos, varias veces más. No hablaremos de las soluciones (en el 90% de los casos, es simplemente el viejo y regular useMemo() o memo()). Pero hablaremos de todo lo que viene antes - y aprenderemos a analizar cualquier problema de rendimiento de React, paso a paso. (Nota: Esta masterclass es más adecuada para ingenieros que ya están familiarizados con cómo funcionan useMemo() y memo() - pero quieren mejorar en el uso de las herramientas de rendimiento alrededor de React. Además, estaremos cubriendo el rendimiento de la interacción, no la velocidad de carga, por lo que no escucharás una palabra sobre Lighthouse 🤐)
Con el lanzamiento de React 18 finalmente obtenemos el tan esperado renderizado concurrente. Pero, ¿cómo va a afectar eso a tu aplicación? ¿Cuáles son los beneficios del renderizado concurrente en React? ¿Qué necesitas hacer para cambiar al renderizado concurrente cuando actualices a React 18? ¿Y qué pasa si no quieres o no puedes usar el renderizado concurrente todavía?
¡Hay algunos cambios de comportamiento de los que debes estar al tanto! En esta masterclass cubriremos todos esos temas y más.
Acompáñame con tu portátil en esta masterclass interactiva. Verás lo fácil que es cambiar al renderizado concurrente en tu aplicación React. Aprenderás todo sobre el renderizado concurrente, SuspenseList, la API startTransition y más.
La adición de la API de hooks a React fue un cambio bastante importante. Antes de los hooks, la mayoría de los componentos tenían que ser basados en clases. Ahora, con los hooks, estos son a menudo componentes funcionales mucho más simples. Los hooks pueden ser realmente simples de usar. Casi engañosamente simples. Porque todavía hay muchas formas en las que puedes equivocarte con los hooks. Y a menudo resulta que hay muchas formas en las que puedes mejorar tus componentes con una mejor comprensión de cómo se puede usar cada hook de React.Aprenderás todo sobre los pros y los contras de los diversos hooks. Aprenderás cuándo usar useState() versus useReducer(). Veremos cómo usar useContext() de manera eficiente. Verás cuándo usar useLayoutEffect() y cuándo useEffect() es mejor.
ReactJS es extremadamente popular y, por lo tanto, ampliamente soportado. TypeScript está ganando popularidad y, por lo tanto, cada vez más soportado.
¿Los dos juntos? No tanto. Dado que ambos cambian rápidamente, es difícil encontrar materiales de aprendizaje precisos.
¿React+TypeScript, con los IDEs de JetBrains? Esa combinación de tres partes es el tema de esta serie. Mostraremos un poco sobre mucho. Es decir, los pasos clave para ser productivo, en el IDE, para proyectos de React utilizando TypeScript. En el camino, mostraremos el desarrollo guiado por pruebas y enfatizaremos consejos y trucos en el IDE.
En esta masterclass, aprenderás cómo construir tu primer dapp de pila completa en la blockchain de Ethereum, leyendo y escribiendo datos en la red, y conectando una aplicación de front end al contrato que has desplegado. Al final de la masterclass, entenderás cómo configurar un entorno de desarrollo de pila completa, ejecutar un nodo local e interactuar con cualquier contrato inteligente usando React, HardHat y Ethers.js.
La Biblioteca de Pruebas de React es un gran marco para las pruebas de componentes de React porque responde muchas preguntas por ti, por lo que no necesitas preocuparte por esas preguntas. Pero eso no significa que las pruebas sean fáciles. Todavía hay muchas preguntas que tienes que resolver por ti mismo: ¿Cuántas pruebas de componentes debes escribir vs pruebas de extremo a extremo o pruebas de unidad de nivel inferior? ¿Cómo puedes probar una cierta línea de código que es difícil de probar? ¿Y qué se supone que debes hacer con esa persistente advertencia de act()? En esta masterclass de tres horas, presentaremos la Biblioteca de Pruebas de React junto con un modelo mental de cómo pensar en el diseño de tus pruebas de componentes. Este modelo mental te ayudará a ver cómo probar cada bit de lógica, si debes o no simular dependencias, y ayudará a mejorar el diseño de tus componentes. Te irás con las herramientas, técnicas y principios que necesitas para implementar pruebas de componentes de bajo costo y alto valor. Tabla de contenidos- Los diferentes tipos de pruebas de aplicaciones de React, y dónde encajan las pruebas de componentes- Un modelo mental para pensar en las entradas y salidas de los componentes que pruebas- Opciones para seleccionar elementos DOM para verificar e interactuar con ellos- El valor de los mocks y por qué no deben evitarse- Los desafíos con la asincronía en las pruebas de RTL y cómo manejarlos Requisitos previos- Familiaridad con la construcción de aplicaciones con React- Experiencia básica escribiendo pruebas automatizadas con Jest u otro marco de pruebas unitarias- No necesitas ninguna experiencia con la Biblioteca de Pruebas de React- Configuración de la máquina: Node LTS, Yarn
Comments