Having a single object for managing your application state (i.e. I use Redux Toolkit, and while the documentation is still a WIP, there's very little boilerplate code at all. TLDR - Recoil implements the same basic conceptual model of MobX, while sharing some drawbacks of Redux, but is tightly coupled to React. I agree with your observations, namely that if everything's inside the store then you'd have a centralized place for everything. For example a number of unread messages depends directly on the list of messages. And context. Freedom and flexibility come at a cost. Its like asking you to write a lexical analyzer, parser, tokenizer, codegen and letting you control each stage, vs calling .eval. And to address asynchronous behavior, I call setState in a useEffect, which I think is also quite easy to handle & read. And I see that this is a turn that React community is already slowly doing, being more and more vocal about being disappointing by programming with Redux or Mobx. We strive for transparency and don't collect excess data. This is simply the nature of client-side app states. Awesome JavaScript List and direct contributions here. Mobx is not an OOP library. I think you'll like them. What do you feel is missing atm? Mobx can be applied to any modern JS environment. Redux. instead of mutating state directly you do a named dispatch which can then do what it wants. You are now time traveling - you travel back in time in the history of your application. As more and more components need access to the same state, you put that state higher and higher in component tree, until it finally arrives to the top-most component. Redux. It is written in JavaScript. Although the components can read the Redux store directly, they cannot update the store directly. Actions don't use reducers. No, no, I haven't foind your article to bash Mobx. In order to achieve that, Mobx has a mechanism that is inspired by reactive programming concepts. I don't any reason why something like this wouldn't be great & simple! Redux is very low level, by design, and gives you hooks into each stage. React Starter Kit - A skeleton of an "isomorphic" web application / SPA built with React.js, Express, Flux, and more Mobx became one of the more popular ones. Our goal is to help you find the software and libraries you need. When I was first learning front-end development, no one talked about "state management". I mean, of course, you will sometimes have to display a number of unread messages in two completely different places in your application. But they cannot be calculated in a synchronous way. The actual mechanism for this is whats often referred to as hidden 'magic', but its just using standard JS - getters/setters or ES6 proxies. Redux was developed by Dan Abramov and Andrew Clark. Recoil is just combining Context and Hooks and providing nice syntax and depends on React internals. Redux state tree doesn't have to be flat, although it often is. this is an interesting read to blog.risingstack.com/reinventing-h... Was this article written in 2016? Not to mention render optimizations, nicer "selector" syntax, and generally the usefulness of having observable state. The main drawback of Redux is it depends on the user/app to figure out dependencies, optimize the data flow and avoid unnecessary updates. However, as it is in life, the truth is not that simple. This makes it conceptually clean with no hidden magic, but complex. This is not an issue for most apps, but it is a very real problem. Our Facebook website can now display the number of unread messages in any place we want, provided we keep the list of messages in the store. It sounds great and people flocked to the idea immediately. In Mobx, all you have to remember basically is "dereference values as late as possible" (one point from Mobx docs: mobx.js.org/best/pitfalls.html). This works very well at the beginning. People obviously felt that. We had a relatively small app that used redux and had all types of data, global state and service responses, stored in there. Redux is hell and congrats FB for discovering MobX ideas 5 years late. One approach causes the code that is full of boilerplate, multiple files and difficult to track relations between different parts of the codebase.