Maya Shavin
Smart & Controllable UI
with
Maya Shavin
State management
MobX
manage state flow of different user interface controls
State management
Set local state
Update local state
Render component
Multiple clicks?
Loading state?
Error state?
Disabled?
Bottom 🆙
Basic actions
New action
New action
Bug fixes
Bug fixes
Bottom 🆙
Difficult to maintain
Difficult to test
🐛
Hard to understand
State Machines
Finite
Deterministic Finite Automata
Deterministic
Finite
Automaton
one initial state
finite number of states
finite number of events
transition map triggered by events
Promises
Async/Await
Callbacks
Observables
UI phases/components are dependent
Transition between phases based on actions
Actions are events triggered
Building user interfaces === building user
diagrams
graphs
trees
flows
State machines & state charts for modern web
Create
Interpret
Execute
State machine/chart
Manage
State machine/chart
Machine
transition
Events
State machine/chart
Actions
States
const fetchMachine = Machine({
id: 'fetch',
initial: 'idle',
context: { retries: 0 },
states: {
idle: {
on: {
FETCH: 'loading'
}
},
loading: {
on: {
RESOLVE: 'success',
REJECT: 'failure'
}
},
success: {
type: 'final'
},
failure: {
on: {
RETRY: {
target: 'loading',
actions: assign({
retries: (context, event) => context.retries + 1
})
}
}
}
}
});
inactive
toggle
active
toggle
import { Machine } from 'xstate';
export const toggleMachine = Machine({
id: 'toggle',
context: {
/* some data */
},
initial: 'inactive',
states: {
inactive: {
on: { toggle: 'active' }
},
active: {
on: { toggle: 'inactive' }
}
}
});
Advantages of XState
Code reusability
Test coverage
Code scalability & maintenance
Better code design & planning
Easy to debug and spot bugs
Visually clear view of the code flow
Resources
State machine/chart
console.log(Maya)
Senior Software Engineer
Core maintainer of StorefrontUI
NuxtJS Ambassador
Everything about Frontend/Web
Media Developer Expert (MDE)
THANK YOU!
Plan. Model. Develop
Smart & Controllable UI with (X)state machine
By Maya Shavin
Smart & Controllable UI with (X)state machine
UI components are built on user flows or state graphs. To manage these states, we usually resolved to boolean variables system like isLoading. But this proves to be buggy and hard to maintain as the codebase grows. There is a better solution. In my talk, we will explore how to fully control our app's states and develop a more adaptive UI system to users' behavior with state machines, statecharts and more.
- 189