Como mencioné anteriormente, una máquina puede representarse como un reductor, y eso es lo que esta función machine.transition es. Proporcionas el estado actual y los eventos que acaban de suceder, y obtienes el siguiente estado. Lo que también podría hacer es proporcionar una especie de interfaz de emisor de eventos en la que contiene el estado en sí y podrías enviarle eventos y hacer que gestione su propio estado. Esto es realmente útil en situaciones en las que no quieres tener que conectar juntos dónde almacenar el estado. Además de eso, también es observable. Podrías usar esto con RXJS también.
No hace falta decirlo, pero esto es completamente agnóstico al framework. Podrías usarlo con cualquier framework. Está configurado para que sea fácilmente integrable, cualquiera que sea la palabra. Podrías usar cualquier framework como React, Vue, Angular, Svelte, y más. Pero hablando de React, hay muchas utilidades útiles que te permiten usar más fácilmente las máquinas X state con React. Así que una de estas es el hook use machine, y esto es justo como el hook use reducer. De hecho, si conoces use reducer, entonces básicamente ya conoces use machine. Así que en lugar de pasar un reductor, pasarías una máquina que has creado, y obtienes los mismos dos valores esperados de la tupla, el estado, que representa el estado actual de la máquina, y send, que representa una forma de enviar eventos a esa máquina en ejecución. Ahora, el estado también tiene algunas utilidades, como matches, de modo que en lugar de tener que averiguar cuál es el estado finito exacto de la máquina, podrías simplemente pasar, como, los estados esperados o parte del estado, como first, second review en este ejemplo de formulario de asistente, y proporciona una forma limpia y agradable de mostrar diferentes partes del componente, y, por supuesto, podrías también enviar eventos, ya sea solo la cadena de eventos o un objeto de evento completo, por lo que es realmente útil y muy práctico, ya sabes, úsalo como lo harías con use reducer.
Pero quiero hablar sobre algunas características recientes y próximas de X state y X state React que me emocionan particularmente. La primera es use interpret. Así que use interpret, el objetivo de esto es interpretar una máquina, crear un servicio, y simplemente devuelve ese servicio. Y ese servicio es un solo objeto, que es una referencia a, ya sabes, la versión interpretada de esa máquina, que nunca cambia. Y por lo tanto, esto lo hace realmente útil en contexto. Así que si fueras a crear un contexto con React, ahora podrías pasar ese servicio a ese proveedor de contexto y usarlo donde quieras, como un asistente. Ahora, lo genial de esto es que, como el servicio no cambia, no va a causar muchos rerenders. De hecho, solo se actualiza una vez, que es cuando se crea el servicio. Así que estás garantizado a no tener ningún renderizado extra. Y así es como usarías esto es por una combinación de dos hooks, use service y use context. Así que tomas el servicio de el contexto, que es ese contexto de servicio, y luego usando el hook use service, podrías usarlo como una máquina. En lugar de pasar una máquina, pasas el servicio, y obtienes los dos mismos valores esperados de la tupla, el estado actual, y la forma de enviar a ese servicio. Y luego puedes usarlo como normalmente. Y así te da la capacidad de tener tanto un estado local como global, e incluso un estado semi-local donde necesitas que algunos estados sean compartidos entre un montón de componentes, pero no con cada componente. Y sin embargo, incluso esto, a veces, aunque previene como un rerenderizado masivo debido a que todo cambia, también puede llevar a demasiados renders si uno de tus componentes
Comments