No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

¿Qué es XState?

3/15
Recursos

Aportes 9

Preguntas 2

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

❎¿Qué es XState?

Ideas/conceptos claves

XState

Es una librería e intérprete para trabar con máquinas de estado y diagrama de estados en diferentes tecnologías

Recursos

XState Docs

XState Visualizer

Apuntes

  • XState puede integrarse con diferentes tecnologías como ser React, Vue o Svelte
  • Tiene un visualizador de donde podremos observar y manipular máquinas de estados
📌 **RESUMEN:**  XState es una librería que te ayuda a crear máquinas de estados y se puede utilizar con diferentes tecnologías web. Aparte contiene un visualizador donde puedes observar y manipular máquinas de estados.

XState Visualizer está buenísimo! Repliqué la rutina para preparar mates (obviando algunos pasos para no entrar en detalles). Dejo el código:

import { createMachine, assign } from 'xstate';

interface Context {
  retries: number;
}

const fetchMachine = createMachine<Context>({
  id: 'drink_mate',
  initial: 'mate',
  context: {
    retries: 0
  },
  states: {
    mate: {
      on: {
        FILL_YERBA: 'mate_yerba'
      }
    },
    mate_yerba: {
      on: {
        FILL_HOT_WATER: '🧉',
        FILL_COLD_WATER: '😵'
      }
    },
    '🧉': {
      type: 'final'
    },
    '😵': {
      on: {
        'HEAT_WATER': {
          target: 'mate_yerba',
          actions: assign({
            retries: (context, event) => context.retries + 1
          })
        }
      }
    }
  }
});
Es una librería e interprete que nos ayuda a manejar máquina de estado en diferentes tecnologías. Básicamente ellos construyeron una base que nosotros luego podemos implementar usando Typescript, React, Vue y muchas otras cosas para manejar máquinas de estado dentro de nuestros proyectos. También tienen un `visualizer`, una página donde nosotros podemos diagramar máquinas de estado e interactuar con ellas mientras las vamos dibujando. ![](https://static.platzi.com/media/user_upload/image-2728061c-d431-40f5-917d-a56aed7c6543.jpg) Este es el link del visualizer: <https://stately.ai/viz> Aquí podemos pegar el objeto de nuestra máquina de estado e irlo armando. ```js import { createMachine, assign } from 'xstate'; const fileMachine = createMachine({ id: 'archivos', initial: 'inicial', states: { inicial: { on: { INIT_UPLOAD: { target: 'cargando'} } }, cargando: { on: { UPLOAD_COMPLETE: { target: 'terminado'} } }, terminado: { on: { RESTART: { target: 'inicial' } } } } }) ``` Tenemos un `estado inicial`, que en este caso se llama `initial` , y tenemos un `listado de estados` que son los posibles estados en los que puede estar mi máquina. Dentro de cada uno de estos estados tenemos al atributo o propiedad `On` , que la usamos para declarar los `eventos` que puede recibir ese estado. Entonces si yo estoy `inicial` yo sé que puedo hacer un `INIT UPLOAD` , si estoy en `cargando` , puedo hacer un `UPLOAD COMPLETE` . Luego de armar el objeto de la máquina y tenemos una idea de cómo debe funcionar, le damos al botón de `Visualize` y nos lo va a cargar en un diagrama de estados. Lo genial de este diagrama de estados es que es interactivo. ![](https://static.platzi.com/media/user_upload/image-b3e697b0-803b-44f5-957e-e80331abcf63.jpg) Si nos fijamos ahorita está en el `estado inicial` , que es el que tiene el borde azul, y la transición que está habilitada, que podemos hacer estando en ese estado es el `INIT_UPLOAD` . Si le damos podemos ver cómo la visualización del diagrama se mueve a mostrar el siguiente estado que es `cargando` y me muestra la opción de `UPLOAD_COMPLETE` para seguirme moviendo a través de nuestra máquina de estado. Esto funciona muy bien cuando estamos empezando a armar nuestra máquina, que solo sabemos un poco del flujo que queremos tener, pero no tenemos claro los eventos o las transiciones. Esto nos ayuda muchísimo a verlo de una manera gráfica. Además de eso, es muy útil para `debugging` si luego metemos más estados mientras estamos programando y no se sabe qué se rompió, podemos traerlo por acá y ver dónde se está rompiendo la máquina.

INIT_UPLOAD, UPLOAD_COMPLETE, … son las acciones que se pueden disparar según es estado actual.

Es una librería e interprete para trabajar con maquinas de estado y diagramas de estado. puede usarse con React, vue o Svelte.
.
código de visualizador:

import { createMachine } from 'xstate';

const fileMachine = createMachine({
  id: 'archivos',
  initial: 'initial',
  states: {
    initial: {
      on: {
        INIT_UPLOAD: { target: 'cargando'}
      }
    },
    cargando: {
      on: {
        UPLOAD_COMPLETE: { target: 'terminado'}
      }
    },
    terminado: {
      on: {
        RESTART: { target: 'initial' }
      }
    }
  }
}) 

En el examen, hay una pregunta "Son usados para representar una máquina de estados de manera gráfica" donde la opción "Visualizer" es incorrecta (lo cual en esta clase claramente dice lo contrario) y además el link del examen a "Repasar" lleva a la clase anterior, que no habla de esto, por lo que queda bastante confuso.
XState y Redux son herramientas para manejar el estado en aplicaciones, pero tienen enfoques diferentes. **XState** utiliza máquinas de estado para describir estados y transiciones, lo que permite visualizar flujos y manejar lógica compleja de manera declarativa. Es ideal para situaciones con múltiples estados y transiciones, como formularios o procesos complejos. **Redux**, por otro lado, es una biblioteca para manejar el estado global de aplicaciones. Utiliza un enfoque basado en acciones y reducers, lo que puede ser más adecuado para aplicaciones donde se requiere un simple flujo de datos unidireccional. Ambas herramientas son poderosas, pero la elección depende de los requisitos específicos del proyecto y de la complejidad del estado que manejes.
- **Máquinas de estado**: Modelos que representan los estados y transiciones de un sistema. - **XState**: Librería para manejar máquinas de estado en diversas tecnologías (TypeScript, React, Vue, etc.). - **Visualizer**: Herramienta para diagramar y visualizar máquinas de estado de manera interactiva. - **Estado inicial**: El primer estado de la máquina, donde comienza el proceso. - **Transiciones**: Cambios de un estado a otro en respuesta a eventos (ej. Init Upload). - **Depuración**: Uso del visualizador para identificar y corregir errores en el flujo de la máquina de estado. Estos conceptos son fundamentales para implementar y gestionar máquinas de estado en tus proyectos.

Que es XState una alternativa mas para gestionar el estado en nuestras aplicaciones. Alternativa a Redux y cuando con React Context y hooks no te sea suficiente.