react and view frameworks arent the solution to that problem. react isnt even reactive - you still have to deal with event -> repaint.
react only tried to obscure that into a constraint language instead while actually hamstringing you and pushing the complexity elsewhere
events are here to stay and that's a good thing. these reactive frameworks borne out of an attempt to avoid events or complexity don't eliminate events or complexity - they make everything into an event or a necessarily complex structure in their attempt at pathological avoidance. the solution is factoring and proper honesty in your semantic names. but most people would rather blame their (very ample) tools than their skill or laziness or apathy.
i will say async/await is a big help for humans but synchronous code vs asynch as you may know is not the problem at hand here.