Redux makes managing global / central state reasonable, and in conjunction with the `connect()` function allows you to A) pull in needed global state and B) dispatch data to be centrally processed such that your component gets to not give a shit. It'll just update as-needed. It's dumb.
Strings for types sucks (it's better with Flow, or Typescript I assume) but it is what it is... the immutability can also lead to some subtle bugs if you fuckup and mutate something, but overall I'd rather write a React app with Redux than without at this point just for ease of reasoning about the system as a whole.
If you've never dealt with this type of architecture, it can be strange at first but it makes managing state / data flow much easier.
[0] - https://medium.com/@dan_abramov/smart-and-dumb-components-7c...
Nit: It maps it to a virtual DOM, not XML.
That it transpiles down to something else is just an implementation detail to the developer. For all I care it could be jQuery statements :)
What's your take on things you miss from Redux now that you've switched over to Mobx?
mobx-state-tree is what you are looking for. You can model it similar to your Redux setup. It is immutable. It also has the snapshot stuff Redux has.