I used mobx-state-tree once with great success to implement efficient time travelling in an after effects like editor (to implement cmd+z/cmd+y). In the app, the state was updated multiple times per second and it still performed amazingly. I migrated this from mobx to mobx-state-tree and as both libraries work together seamlessly, the migration was super straight forward.
https://github.com/mobxjs/mobx-state-tree