Redux has gone so far to make it the primary requirement for its use. Could anyone explain why is immutability given the crown among the best practices?
This is just a part of the answer but tl;dr: It's easier to reason about data when data is mutated in 1 place as opposed to n places.
As told in @adamskinner 's answer, React did if for performance. The idea came from ClojureScript, whose data is designed to be immutable. The original idea may be from Haskell, I'm not very sure. But you can find more at en.wikipedia.org/wiki/Persistent_data_structure .
The reason it adopted immutability is Rich Hickey think that mutation is unreliable. Once you share the data to many people and all of them are able to modify data, you can never be sure the data is what you want. And sharing data in parallel programming will become more dangerous. That sounds unrelated to React, but in large GUI apps, when you share the data, it will become hard to restrict the behaviors from various developers. So, immutability may help.
While MobX is very useful and very performant, it doesn't mean mutations is always good. You still have to make sure that the uni-directional data flow is working as expected. It's just JavaScript is implemented this way, which makes operating immutable data a bad experience.
Adam Skinner
From what I gather, it makes it easier to determine what has changed by comparing references rather than underlying data.
MobX is an outlier here, getting excellent performance and allowing data mutations.