Useful when two components are not under the same line of inheritance (from two separate branch) and use the same shared state and need to keep the state in synch.
Atom
Selectors allow you to calculate the state of a component from the state of other components, without having to materialise an ad-hoc state for that component.
Applying a selector in front of an atom, can apply constraints to the state, for example the aspect ratio of a picture that remains invariate.
Selectors can also be async. Not only it has to compute the derived state, but it also has to source the data from outside the app (I/O call), simply returning a promise.
Saves the state in the URL. You can share the URL and the app will load with that same saved state.
Attach metadata to atoms. Works with state snapshots.