React Hooks
vs
Reactive State Machines

Farzad Yousef Zadeh

@farzad_yz

✈️

💻

🇫🇮

@farzad_yz

🔭

HSL Zone

@farzad_yz

D

D

C

B

A

Detect zone based on Geolocation

Watch for Geolocation changes

Send local notification on zone change

Spec

Manually re-detect zone

Geolocation Support

Manual refresh should turn off watching

Errors

Hidden Evils

Notification Support

Only when watching location is on and there is a change in zone

( Zone detection, Geolocation watch, Notification)

 Zone detection

Initialize with Notifocation permissions

Derived State

Attempt 1

Irrelevant grouping

Explicitness

View-State Mapping

View

Side Effects

Interpreter Logic

Ingredients

State

...rest

HOOKS

Side effects

(Event, Action)

Guard in Execution

Change Detection

I'm sorry that I long ago coined the term "objects" for this topic because it gets many people to focus on the lesser idea.

The big idea is "MESSAGING"

Reactive Statecharts

Finite amount of states

Finite State Machines

Start from initialState

Transitions between states in react to events

Finite State Machines

Only reacts to events defined on the state

Explicit definition at CONSTRUCTION

Act as a firewal to whitelist events

Follow       (state + event) => action

Statechart extends FSM

Entry/Exit actions

Statechart

Structure (Nested, Parallel, Memory)

Extended state (context)

Conditional transitions (guards)

Detecting Support

Support Error

Finding Zone

Zone Error

Subscribed to Geolocation changes

Side Effect Execution

Internal Actions (Context Updaters)

Update error from undefined to zone detection Error

Update zone from A to B

(Mini reducers)

External Actions (Side effects)

Sending local Notifications

Fire and Forget

Analytics

Crash Reporting

Activities

Kept alive running actions in a certain state
(side effects over time)

Beeping

flashing icon next to the live events in the social events feed

Stream callbacks

Activities with impact
(their result matters)
(Subscriptions with result)

Data polling from server

Websockets

Geolocation changes

Invoked Services

Asynchronous side effects fired once

Detecting the zone

Fetching data from server

Promises

State + Event => Action (state less)

Event => Action
(state full)

VS

Change Detection

State, Event mapping

VS

Purity vs Idempotence

Reducing logic

Finite state machines

Guarding
vs
Not Allowing

Event => Action

State + Event => Action

Travel To Past
vs
Travel to Past & Future

Idiomatic reducing logic

Idempotence

Portable behavior

Statecharts kept the logic the same

Statecharts made the logic, portable

Statecharts are serializable

Statecharts make it super easy to test
(the only testable parts are your own services)

So use FSM and Statechart because:

You say what state you need, everything else follows as defined

Things happen when they are supposed to happen

Invalid things become impossible

Feel safer in adding new features

Let's see it in action!

Thank You!

Farzad Yousef Zadeh

@farzad_yz