DESARROLLAR UIs ES UNA ACTIVIDAD COMPLEJA

DESARROLLAR UIs IMPLICA ENFRENTAR MUCHAS DECISIONES

MANEJO DEL ESTADO

ESTADO !== DATO

 


 
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  // ✅
}

INVÁLIDOS

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


 

{
  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

ERROR

ERROR

OK


 

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 === "ERROR") {
  // mostrar input con error
}


if (estado === "OK") {
  // mostrar input validado
}

VACIO

ERROR

OK

👉

👉

👉

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 un estado
  • 👮‍♂️ GUARDS transiciones condicionales
 
 

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?

SI YA ESTAMOS ESCRIBIENDO

FSM IMPLÍCITAS,

¿POR QUÉ NO HACERLAS 

EXPLÍCITAS?

👋 ¡GRACIAS!

Charla FSM

By Pablo Hoc

Charla FSM

  • 68