2016-11-09 11:02:57 +00:00
|
|
|
# 2. Contain and manage state
|
|
|
|
|
2019-01-17 16:06:44 +00:00
|
|
|
Date: 2016-11-09
|
2016-11-09 11:02:57 +00:00
|
|
|
|
|
|
|
## Status
|
|
|
|
|
|
|
|
Accepted
|
|
|
|
|
|
|
|
## Context
|
|
|
|
|
2016-11-17 21:53:21 +00:00
|
|
|
The hardest part of debugging Page Previews issues (especially those related to
|
2016-11-09 11:02:57 +00:00
|
|
|
EventLogging) was understanding the state of the system (the "state") and how
|
|
|
|
it's mutated given some interaction(s). This was in no small part because the
|
|
|
|
state was defined, initialized, and mutated in various parts of the codebase.
|
|
|
|
|
2016-11-17 21:53:21 +00:00
|
|
|
The state required for Page Previews to function isn't actually overly
|
2016-11-09 11:02:57 +00:00
|
|
|
complicated. To keep things easy to debug/easy to reason about we should
|
|
|
|
endeavour to isolate the state and its mutations from the various other parts of
|
|
|
|
the system.
|
|
|
|
|
|
|
|
## Decision
|
|
|
|
|
|
|
|
Use [Redux](http://redux.js.org).
|
|
|
|
|
|
|
|
## Consequences
|
|
|
|
|
|
|
|
* Newcomers will have to familiarise themselves with the library (especially
|
|
|
|
it's nomenclature).
|
|
|
|
* All changes will have to be broken down into: the additional state that they
|
|
|
|
require; actions that are dispatched; and how the state is mutated as a result
|
|
|
|
of those actions. This requires discipline.
|
|
|
|
* We benefit from using a tool that is part of an increasingly rich ecosystem,
|
|
|
|
e.g. see [Redux DevTools Extension](https://github.com/zalmoxisus/redux-devtools-extension).
|