DESARROLLAR UIs ES UNA ACTIVIDAD COMPLEJA




DESARROLLAR UIs IMPLICA ENFRENTAR MUCHAS DESICIONES
¿QUÉ ES EL ESTADO?
ESTADO !== DATO
🧉 MATE
🗃 DATOS
📷 ESTADOS
👉 SIN ARMAR
👉 CEBADO
👉 LAVADO
👉 ARMADO
👉 YERBA
👉 AGUA
👉 CEBADAS
Por favor, ingrese un email válido
Por favor, ingrese un email válido
{
email: "",
esValido: false, // 🚫
}
{
email: "luke.s",
esValido: false, // 🚫
}
{
email: "",
esValido: false, // 🚫
}
{
email: "luke@gmail.com",
esValido: true, // ✅
}
👈
👈
Por favor, ingrese un email válido
Por favor, ingrese un email válido
{
email: "",
esValido: false, // 🚫
validado: false // 🚫
}
{
email: "luke.s",
esValido: false, // 🚫
validado: true // ✅
}
{
email: "",
esValido: false, // 🚫
validado: true // ✅
}
{
email: "luke@gmail.com",
esValido: true, // ✅
validado: true // ✅
}
👈
👈
👍
👍
ESTADOS POSIBLES
email.length | > 0 | 0 |
esValido | TRUE | FALSE |
validado | TRUE | FALSE |
2 cantidad props
2 3= 8
ESTADOS
{
email: "luke.s",
esValido: false, // 🚫
validado: false // 🚫
}
{
email: "luke.s",
esValido: true, // ✅
validado: false // 🚫
}
{
email: "",
esValido: true, // ✅
validado: false // 🚫
}
{
email: "",
esValido: true, // ✅
validado: true // ✅
}
IMPOSIBLES
VALORES MUTUAMENTE EXCLUYENTES
{
esValido: true, // ✅
validado: false // 🚫
}
{
email: "",
esValido: true // ✅
}
{
email: "luke@gmail.com",
validado: false // 🚫
}
🛡 GUARDS
if (email.length === 0 &&
!validado &&
!esValido) {
// mostrar el input normal
}
if (validado &&
!esValido) {
// mostrar input con error
}
if (email.length > 0 &&
validado &&
esValido) {
// mostrar input validado
}
APPROACH TRADICIONAL
👎 DESVENTAJAS
🚫
🤔 ¿Cómo mejorar esto?
EXPLÍCITO
ESTADO
IMPLÍCITO
ESTADO
VS
Por favor, ingrese un email válido
Por favor, ingrese un email válido
1
{
email: "",
esValido: false, // 🚫
validado: false // 🚫
}
{
email: "luke.s",
esValido: false, // 🚫
validado: true // ✅
}
{
email: "",
esValido: false, // 🚫
validado: true // ✅
}
{
email: "luke@gmail.com",
esValido: true, // ✅
validado: true // ✅
}
VACÍO
INVÁLIDO
INVÁLIDO
VÁLIDO
EXPLÍCITO
ESTADO
IMPLÍCITO
ESTADO
VS
if (email.length === 0 &&
!validado &&
!esValido) {
// mostrar el input normal
}
if (validado &&
!esValido) {
// mostrar input con error
}
if (email.length > 0 &&
validado &&
esValido) {
// mostrar input validado
}
if (estado === "VACIO") {
// mostrar el input normal
}
if (estado === "INVALIDO") {
// mostrar input con error
}
if (estado === "VALIDO") {
// mostrar input validado
}
MAQUINAS DE ESTADO FINITO
FINITE STATE MACHINES
FSM

👉 tienen un ESTADO INICIAL
👉 TRANSICIONES entre estados
👉 un número finito de ESTADOS
👉 EVENTOS que disparan transiciones
👉 un número finito de ESTADOS FINALES




VENTAJAS DE LAS FSM
LIMITACIONES DE LAS FSM

EXPLOSION DE ESTADOS
STATECHARTS
FSM
+
🍄
=
- 🏭 JERARQUÍA estados anidados
- 🛤 ORTOGONALIDAD estados paralelos
- 🏃♀️ ACCIONES al entrar y salir de una transición
- 👮♂️ GUARDS transiciones condicionales
- 📆 HISTORIA recordar el último estado visitado
- ⏱ TRANSICIONES CON DELAY
STATECHARTS
PODERES ⚡️

¿CÓMO USARLOS?

const inputConValidacionMaquina = Machine(
{
id: 'inputConValidacion',
initial: 'vacio',
states: {
vacio: {
on: {
escribir: "editando"
}
},
editando: {
on: {
validar: "validando"
}
},
validando: {
on: {
validacion_ok: "valido",
validacion_error: "invalido"
}
},
valido: {
on: {
escribir: "editando"
}
},
invalido: {
on: {
escribir: "editando"
}
}
}
}
)
CADA MÁQUINA TIENE UN ID
UN ESTADO INICIAL
UN CONJUNTO DE ESTADOS
TRANSICIONES A OTROS ESTADOS A PARTIR DE EVENTOS
¿SI SON TAN BUENOS POR QUÉ NO SE USAN?
YA ESTAMOS ESCRIBIENDO FSM IMPLÍCITAS, ¿POR QUÉ NO HACERLAS EXPLÍCITAS?
Charla FSM v2
By Pablo Hoc
Charla FSM v2
- 62