Redux follows three fundamental principles:
Single source of truth: The state of your whole application is stored in an object
tree within a single store. The single state tree makes it easier to keep track of
changes over time and debug or inspect the application.
State is read-only: The only way to change the state is to emit an action, an
object describing what happened. This ensures that neither the views nor the
network callbacks will ever write directly to the state.
Changes are made with pure functions: To specify how the state tree is
transformed by actions, you write reducers. Reducers are just pure functions that
take the previous state and an action as parameters, and return the next state.