Simpler UI Logic With Finite State Machines
I find "state" to be quite an overloaded term, especially in React land, so I use "stage" instead for the various state machines in our applications. It's caught on in our org and I've heard no complaints.State machines are great but they get quite complicated when you have two machines interacting at some point. I find this happens quite a bit for complicated UIs, like a data grid with filter and search controls, in-row controls, a preview pane on the side, etc. Things that can be reasonably simple become overly complicated as you try to cram everything into a state machines model.It's hard to give concrete examples... but it happens often. I even find myself doing it.Rust enums (sum types) are really good for doing FSMs, as they:- Allow you to add fields to each state, which makes it easier to understand what each state is for at a glance.- Prevent you from accessing fields for a different state at the wrong time.- Make it easy to do nested states, without that nestedness existing for states that don't need it.- Provide exhaustiveness warnings for if you're not handling a case.I do wish more languages had sum types.