I have seen React in action for the first time in relatively complex legacy application. There were some attempts to develop new functions using React and, of course, Redux. Because everyone is using that combination. It is the clear, cool way. Hm…
I had those issues plus:
Then, out of blue sky, I have found MobX. And I realized that I found great React’s partner.
I can have multiple stores - one that holds application state (selected language, global formatting settings), second that holds form state and handles communication with server, third for caching currency conversions, etc. This stores are available through React context - therefore their presence is checked by React using contextTypes definition. You can freely move components in hierarchy as long as you assure that proper stores are in context.
I still have certain level of immutability because MobX checks that no change is done during processing previous change.
Adding functionality is deadly simple. You have two classes - component and store.
Because store is single purpose and is object of class, it is quite easy to determine what you can do with it. If there is method, try to call it. Compare that with searching for proper Redux action.