Charla informal sobre Recoil

Rate this content
Bookmark
34 min
14 May, 2021

Video Summary and Transcription

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.

Available in English

1. Introducción y Resumen de Recoil.js

Short description:

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.

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

React Advanced Conference 2022React Advanced Conference 2022
25 min
A Guide to React Rendering Behavior
Top Content
React is a library for "rendering" UI from components, but many users find themselves confused about how React rendering actually works. What do terms like "rendering", "reconciliation", "Fibers", and "committing" actually mean? When do renders happen? How does Context affect rendering, and how do libraries like Redux cause updates? In this talk, we'll clear up the confusion and provide a solid foundation for understanding when, why, and how React renders. We'll look at: - What "rendering" actually is - How React queues renders and the standard rendering behavior - How keys and component types are used in rendering - Techniques for optimizing render performance - How context usage affects rendering behavior| - How external libraries tie into React rendering
React Summit Remote Edition 2021React Summit Remote Edition 2021
33 min
Building Better Websites with Remix
Top Content
Remix is a new web framework from the creators of React Router that helps you build better, faster websites through a solid understanding of web fundamentals. Remix takes care of the heavy lifting like server rendering, code splitting, prefetching, and navigation and leaves you with the fun part: building something awesome!
Vue.js London Live 2021Vue.js London Live 2021
34 min
Everything Beyond State Management in Stores with Pinia
Top Content
When we think about Vuex, Pinia, or stores in general we often think about state management and the Flux patterns but not only do stores not always follow the Flux pattern, there is so much more about stores that make them worth using! Plugins, Devtools, server-side rendering, TypeScript integrations... Let's dive into everything beyond state management with Pinia with practical examples about plugins and Devtools to get the most out of your stores.
React Advanced Conference 2023React Advanced Conference 2023
33 min
React Compiler - Understanding Idiomatic React (React Forget)
Top Content
React provides a contract to developers- uphold certain rules, and React can efficiently and correctly update the UI. In this talk we'll explore these rules in depth, understanding the reasoning behind them and how they unlock new directions such as automatic memoization. 
React Advanced Conference 2022React Advanced Conference 2022
30 min
Using useEffect Effectively
Top Content
Can useEffect affect your codebase negatively? From fetching data to fighting with imperative APIs, side effects are one of the biggest sources of frustration in web app development. And let’s be honest, putting everything in useEffect hooks doesn’t help much. In this talk, we'll demystify the useEffect hook and get a better understanding of when (and when not) to use it, as well as discover how declarative effects can make effect management more maintainable in even the most complex React apps.
React Summit 2022React Summit 2022
20 min
Routing in React 18 and Beyond
Top Content
Concurrent React and Server Components are changing the way we think about routing, rendering, and fetching in web applications. Next.js recently shared part of its vision to help developers adopt these new React features and take advantage of the benefits they unlock.In this talk, we’ll explore the past, present and future of routing in front-end applications and discuss how new features in React and Next.js can help us architect more performant and feature-rich applications.

Workshops on related topic

React Summit 2023React Summit 2023
170 min
React Performance Debugging Masterclass
Top Content
Featured WorkshopFree
Ivan’s first attempts at performance debugging were chaotic. He would see a slow interaction, try a random optimization, see that it didn't help, and keep trying other optimizations until he found the right one (or gave up).
Back then, Ivan didn’t know how to use performance devtools well. He would do a recording in Chrome DevTools or React Profiler, poke around it, try clicking random things, and then close it in frustration a few minutes later. Now, Ivan knows exactly where and what to look for. And in this workshop, Ivan will teach you that too.
Here’s how this is going to work. We’ll take a slow app → debug it (using tools like Chrome DevTools, React Profiler, and why-did-you-render) → pinpoint the bottleneck → and then repeat, several times more. We won’t talk about the solutions (in 90% of the cases, it’s just the ol’ regular useMemo() or memo()). But we’ll talk about everything that comes before – and learn how to analyze any React performance problem, step by step.
(Note: This workshop is best suited for engineers who are already familiar with how useMemo() and memo() work – but want to get better at using the performance tools around React. Also, we’ll be covering interaction performance, not load speed, so you won’t hear a word about Lighthouse 🤐)
React Advanced Conference 2021React Advanced Conference 2021
132 min
Concurrent Rendering Adventures in React 18
Top Content
Featured WorkshopFree
With the release of React 18 we finally get the long awaited concurrent rendering. But how is that going to affect your application? What are the benefits of concurrent rendering in React? What do you need to do to switch to concurrent rendering when you upgrade to React 18? And what if you don’t want or can’t use concurrent rendering yet?

There are some behavior changes you need to be aware of! In this workshop we will cover all of those subjects and more.

Join me with your laptop in this interactive workshop. You will see how easy it is to switch to concurrent rendering in your React application. You will learn all about concurrent rendering, SuspenseList, the startTransition API and more.
React Summit Remote Edition 2021React Summit Remote Edition 2021
177 min
React Hooks Tips Only the Pros Know
Top Content
Featured Workshop
The addition of the hooks API to React was quite a major change. Before hooks most components had to be class based. Now, with hooks, these are often much simpler functional components. Hooks can be really simple to use. Almost deceptively simple. Because there are still plenty of ways you can mess up with hooks. And it often turns out there are many ways where you can improve your components a better understanding of how each React hook can be used.You will learn all about the pros and cons of the various hooks. You will learn when to use useState() versus useReducer(). We will look at using useContext() efficiently. You will see when to use useLayoutEffect() and when useEffect() is better.
React Advanced Conference 2021React Advanced Conference 2021
174 min
React, TypeScript, and TDD
Top Content
Featured WorkshopFree
ReactJS is wildly popular and thus wildly supported. TypeScript is increasingly popular, and thus increasingly supported.

The two together? Not as much. Given that they both change quickly, it's hard to find accurate learning materials.

React+TypeScript, with JetBrains IDEs? That three-part combination is the topic of this series. We'll show a little about a lot. Meaning, the key steps to getting productive, in the IDE, for React projects using TypeScript. Along the way we'll show test-driven development and emphasize tips-and-tricks in the IDE.
React Advanced Conference 2021React Advanced Conference 2021
145 min
Web3 Workshop - Building Your First Dapp
Top Content
Featured WorkshopFree
In this workshop, you'll learn how to build your first full stack dapp on the Ethereum blockchain, reading and writing data to the network, and connecting a front end application to the contract you've deployed. By the end of the workshop, you'll understand how to set up a full stack development environment, run a local node, and interact with any smart contract using React, HardHat, and Ethers.js.
React Summit 2023React Summit 2023
151 min
Designing Effective Tests With React Testing Library
Top Content
Featured Workshop
React Testing Library is a great framework for React component tests because there are a lot of questions it answers for you, so you don’t need to worry about those questions. But that doesn’t mean testing is easy. There are still a lot of questions you have to figure out for yourself: How many component tests should you write vs end-to-end tests or lower-level unit tests? How can you test a certain line of code that is tricky to test? And what in the world are you supposed to do about that persistent act() warning?
In this three-hour workshop we’ll introduce React Testing Library along with a mental model for how to think about designing your component tests. This mental model will help you see how to test each bit of logic, whether or not to mock dependencies, and will help improve the design of your components. You’ll walk away with the tools, techniques, and principles you need to implement low-cost, high-value component tests.
Table of contents- The different kinds of React application tests, and where component tests fit in- A mental model for thinking about the inputs and outputs of the components you test- Options for selecting DOM elements to verify and interact with them- The value of mocks and why they shouldn’t be avoided- The challenges with asynchrony in RTL tests and how to handle them
Prerequisites- Familiarity with building applications with React- Basic experience writing automated tests with Jest or another unit testing framework- You do not need any experience with React Testing Library- Machine setup: Node LTS, Yarn