Immutable data-structures are useful, but also it is quite a lot of work to transform a codebase written with mutable data-structures into one with immutable ones. This is because mutability is a "viral" property.
I'd go a step further than mentioned... as static render components (single functions) are possible... if you're using something like redux/connect, you can export the static function, along with the default of the connected version. By doing this you have really straight forward testing, and don't even have to deal with the variance of class/object instances. I've build a few apps at this point using only static components.<p>Also, there are options to use immutable for state with redux (it's a little different), but it can be useful, to say the least.<p>The only downside of static components is that hot module replacement doesn't seem to work right, there are ways around it, but not as much fun... that said, I tend to save state to sessionStorage on every change, loading from sessionStorage at start, so refreshing the browser will just show the updated rendering.
How does all of the cloning affect performance? It feels wasteful to create these short-lived components that are explicitly discarded for slightly modified ones, but is that actually a problem?
Interesting, the examples don't use JSX syntax. I wonder, does this make it easier to work with TypeScript, or do they have some other reasoning for not using JSX?