Redux vs MobX : Which is Better For State Management in React?

Before diving into a comparison between two of the most popular state management libraries redux and MobX, let’s first understand the need for a state management library. State management in React has been a subject of dialogue within the Javascript fraternity.

As we know In ReactJs, each component maintains its own local state, and generally, the root component maintains the state of your whole application. Multiple components may maintain their state across component life cycle methods like at the time of mounting, updating, etc. But the problem is as the complexity of your application grows, the state of the component becomes unpredictable, and debugging such an application becomes a lengthy process. It also becomes complex to maintain your states between multiple components.

This is the scenario when the state management libraries(Redux/MobX) comes into the picture.

But, wait now the question is which state management library should I choose? Redux or Mobx?

In this article, we will explore the pros and cons of both. Both Redux and MobX work well with react. We will compare both libraries based on some important points.

Store

Basically, a store is a single source of truth from where your data originates. In simple words, a store is a place where you keep data of your whole application.

Redux has one large store in which states of an entire application are stored.

But, MobX has more than one store. As a result in MobX, you can reuse and separate your stores. for example, you can use a store inside another store.

        // First store 
        class FirstStore {
            @observable flag = false; 
        } 
        
        export default const firstStore = new FirstStore(); 
        
        // Second store that using first store 
        
        import firstStore from 'FirstStore.js'; 
        class SecondStore { 
            @observable flag2 = false;
            
            @action setFlag = () => { 
                this.flag2 = firstStore.flag; 
            } 
        } 
        

Immutable vs mutable

Redux uses immutable states. This means Redux state is read-only, reducers take the previous state and action as parameters and return a new state. You cannot directly overwrite them.

In MobX states can be overwritten. You can read and write the write MobX store.

Plain data vs Observable data

Redux uses a normal Javascript object to store the data. It means Redux stores data in a plain JavaScript object or arrays.

        {
            person = { 
                firstName : "John", 
                lastName : "Doe", 
                age : 50, 
                eyeColor : "blue" 
            }; 
        }
    

MobX uses an observable to store the data. It wraps a normal JavaScript object or an array with observable capabilities.

        class userStore { 
            @observable users = [] 
            
            @action getUser = () => { 
                return this.users; 
            } 
            
            @action addUser = (data) => { 
                this.users.push(data); 
            } 
        }
    

In Redux the data is usually normalized. In MobX, you can keep denormalized data.

Debugging

Since there’s only one store in Redux debugging becomes a lot easier. Also Redux provides powerful developer tools including time travelling. Whereas, debugging becomes a lot harder in MobX as there is more abstraction. And the developer tools existing for MobX are also just average.

Conclusion

The most important thing is it depends on what library you wish to use and are comfortable with.