single store
functional programming paradigm
immutable
pure
explicit update logic
plain JavaScript
more boilerplate
normalized state
flat state
multiple stores
object-oriented programming and reactive programming paradigms
mutable
impure
implicit update logic
“magic” JavaScript
less boilerplate
denormalized state
nested state
short learning curve
simple to use (magic)
quick start
less opinionated
minimal boilerplate
used in lightweight applications
mutable data
object-oriented programming
in a smaller size & few developers project
but can be used in bigger size projects too, when used with explicit constraints
clear constraints
testable lightweight parts
opinionated state management architecture
mature best practices
used in complex applications
immutable data
functional programming
in a bigger size & several developers / teams project
testability, scaleability, maintainability