Back when Redux was fairly new, we used a "mixin" architecture with a single component refreshing the entire global state of the application. Unfortunately, this has been a horrible decision and we're currently moving towards a Redux based solution. Nonetheless, the rendering is still impressive.
Always KISS. Abstractions should be done in case of Rule of 3 (if you're going to write something 3 times, create a layer of abstraction).
Just don't think too much on abstraction. I've worked on codebases that were designed with abstraction as its first thought, and saw scaling issues (major ones) over time. The key to sustainable codebases is to always KISS. You might feel goosebumps watching your abstract code but sadly, your team might not and the effort it might take to explain the same or the time it would take them to understsnd what you meant does not collectively profit the overall environment of the project as a whole.