Excelente curso: https://davidcortesa.github.io/state-machine/
Introducción a las máquinas de estado
Máquinas de Estado: Conceptos y Uso en React con Xstate
Conceptos Básicos de Diagramas de Estado y Transiciones
Introducción a Xstate: Gestión de Máquinas de Estado Interactivas
Diseño de Máquinas de Estado para Reservas de Vuelos
Machines 101
Creación de Proyecto React con Máquina de Estados XState
Propiedades y Métodos de XState: Manejo de Estados Avanzado
Tipos de Transiciones en Máquinas de Estados Finite
Implementación de Eventos y Transiciones en Máquinas de Estado
Machines 102
Implementación de Acciones en Máquinas de Estado Finito
Manipulación del Contexto en XState: Inicialización y Actualización
Máquinas de Estado: Jerarquías y Paralelismo
Implementación de Servicios y Solicitudes HTTP en Proyectos
Validación de Pasajeros y Visualización en Ticket Final
Cierre
Despliegue de Proyectos en GitHub Pages paso a paso
Máquinas de Estado: Implementación en Proyectos Reales
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
GitHub Pages es una fantástica herramienta que te permite exponer tus proyectos al mundo. Aquí te guiaremos paso a paso sobre cómo hacerlo siguiendo un tutorial desarrollado por un estudiante de Platzi. Prepárate y dale vida a ese proyecto que tanto has trabajado; ¡no te quedes con las ganas de mostrarlo!
Comienza instalando el paquete de GitHub Pages en tu proyecto. Asegúrate de estar dentro de la carpeta de tu proyecto antes de ejecutar los comandos necesarios para la instalación. Esto es crucial para que todo funcione perfectamente.
// Comando para instalar GitHub Pages
npm install gh-pages
El siguiente paso esencial es actualizar el archivo package.json de tu proyecto para incluir la entrada de homepage
. Esto es vital para que GitHub Pages sepa cómo encontrar tu aplicación.
Para ello, localiza el archivo package.json
y asegúrate de que la entrada de homepage
esté configurada correctamente con la URL adecuada:
"homepage": "https://platzi.github.io/machines/"
Verifica que los nombres de usuario y repositorio sean los correctos. En este ejemplo, el nombre es 'Machines' (con una 'S' extra) y el nombre de usuario es de Platzi.
Dentro del archivo package.json
, bajo los scripts
, agrega dos nuevos scripts: predeploy
y deploy
. Estos scripts automatizarán el proceso de construcción y despliegue.
Aquí están los scripts que necesitas agregar:
"scripts": {
"predeploy": "npm run build",
"deploy": "gh-pages -d build"
}
Con el código listo en scripts
, tu aplicación está casi lista para ser desplegada.
Regresa a tu terminal y ejecuta los siguientes comandos que harán uso de los scripts que acabas de añadir:
Primero, ejecuta el script de prebuild que compilará tu aplicación:
npm run predeploy
Luego, ejecuta el script de deploy para enviar los archivos a GitHub Pages:
npm run deploy
Al completar estos pasos, tu aplicación debería estar publicada. ¡Felicidades!
Ahora ve a GitHub, dirígete a la sección de Settings
y busca la opción Pages
. Aquí, selecciona la fuente GitHub Pages como el Source
y guarda los cambios. Si todo ha ido bien, la URL pública de tu proyecto estará visible. Es hora de visitarla y disfrutar de tu trabajo en vivo.
Mientras exploras tu recién desplegada aplicación, verifica si hay pequeños bugs. Un ejemplo encontrado frecuentemente es que el componente Ticket muestra siempre el mismo país predeterminado, como Colombia, en lugar del que realmente se ha seleccionado. Te animamos a identificar y resolver este bug por ti mismo, reforzando tus habilidades de desarrollo.
¡Una vez completado todo este proceso, estarás listo para compartir con orgullo tu creación con el mundo! Anímate a dejar un comentario sobre tu experiencia, desafíos enfrentados y las soluciones que encontraste. Seguir perfeccionando y desplegando aplicaciones es una habilidad clave para cualquier desarrollador moderno. ¡Adelante y buena suerte en tu camino hacia el dominio del código!
Aportes 14
Preguntas 1
Excelente curso: https://davidcortesa.github.io/state-machine/
Aqui mi componente de tickets para que actualize el nombre del pais con el guardado en el context:
import React from 'react';
import './Tickets.css';
export const Tickets = ({ send, state }) => {
const finish = () => {
send('FINISH')
};
return (
<div className='Tickets'>
<p className='Tickets-description description'>Gracias por volar con book a fly 💚</p>
<div className='Tickets-ticket'>
<div className='Tickets-country'>{ state.context.selectedCountry }</div>
<div className='Tickets-passengers'>
<span>✈</span>
{ state.context.passengers.map(person => (
<p key={person}>{person}</p>
)) }
</div>
</div>
<button
onClick={finish}
className='Tickets-finalizar button'
>Finalizar</button>
</div>
);
};
Dejo mi aporte al curso
Se añadieron algunas funcionalidades nuevas como la fecha, y país de origen, se mejoró la interfaz para la vista de los tickets.
Hay un bug en el cual si pasan 5 segundos se eliminan los datos pero si se pone finalizar no, estuve intentando, pero al parecer es el action que se pone de primeras el que funciona, intente la solucion de alguien de los comentarios pero el bug se repite, solo que al revez, entonces esta fue mi solucion, que aunque funciona no entendi por que sucede pero funciona
tickets: {
after: {
5000: {
target: "initial",
actions: "cleanContext",
},
},
on: {
FINISH: {
target: "initial",
actions: assign({
selectedCountry: "",
passengers: [],
}),
},
},
},
entonces, en lugar de llamar un ation exterior se hace desde el finish, con eso ambos terminan funcionando
así se resuelve el bug que la profesora mencionó en la clase
donde decía Colombia fijamente ponemos {context.selectedCountry}
y listo
<div className="Tickets-country">{context.selectedCountry}</div>
listo el proyecto con fecha de viaje por el momento
https://capable-duckanoo-95dec7.netlify.app/
Gracias por volar con book a fly 💚
{passenger}
; })} ✈Dejo mi repo de React + typescript + vite + xtstate:
https://github.com/modoZen/booking-state-machine
Dejo mi código de la app typescript + vite, especificamente del archivo
src/type/BookingMachine
import { Event, EventData, SingleOrArray, StateFrom } from 'xstate';
import { Country } from './Country';
import { bookingMachine } from '../machines/bookingMachine';
export interface BookingContext {
passengers: string[];
selectedCountry: string;
countries: Country[];
error: string;
}
export type BookingEvent =
| { type: 'START' }
| { type: 'CONTINUE'; selectedCountry: string }
| { type: 'ADD'; newPassenger: string }
| { type: 'DONE' }
| { type: 'FINISH' }
| { type: 'RETRY' }
| { type: 'CANCEL' };
export interface Props {
state?: StateFrom<typeof bookingMachine>;
send?: (
event: SingleOrArray<Event<BookingEvent>>,
payload?: EventData,
) => void;
}
export const Tickets = ({ send, context }) => {
const finish = () => {
send('FINISH')
};
return (
<div className='Tickets'>
<p className='Tickets-description description'>Gracias por volar con book a fly 💚</p>
<div className='Tickets-ticket'>
<div className='Tickets-country'>{context.selectedCountry}</div>
<div className='Tickets-passengers'>
<span>✈</span>
{context.passengers.map((person, idx) => {
return <p key={idx}>{person}</p>
})}
</div>
</div>
<button onClick={finish} className='Tickets-finalizar button'>Finalizar</button>
</div>
);
};
tickets: {
after: {
5000: {
target: 'initial',
actions: 'cleanContext',
}
},
on: {
FINISH: {
target: 'initial',
actions: 'cleanContext',
},
},
},
Hay un bug muy extraño en el proyecto, cuando se le da a cancelar o finalizar no limpia el estado del array passengers, pero si lo hace cuando se deja pasar el tiempo de esperar de los 5 segundos
excelente
Muy buen curso!
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?