It sounds like you’re true calling is Angular, Java or .NET ;) We tried all the separation of concerns like the nightmarish redux-saga and I can’t say it’s any better. These days I prefer “encapsulation”; I don’t want to look far through reams of thunks and extra files to see what’s happen - I like the simplicity of Co-location or one-degree of separation (by extracting to a custom hook). I will say that classes can look cleaner at times than nesting functions, and don’t come with the same dependency issues, but hooks feel good to use and I’m fine with having logic in views too. Tried all the MVVM crap over the years and didn’t really find it beneficial. Also another advantage of tight co-location is being able to easily hook into the life cycle of the component - a websocket hook can intelligently open and close a topic for example without the user worrying about thst implementation detail.