I just finished a large prototype using React and Redux, without using Sodium or FRP at all, and I have mixed feelings about it.
React is okay, but you have to use reselect to avoid redundant updates. This is easy to forget, resulting in slower UI updates.
Redux is a big tradeoff IMHO. Only the undo/redo was wonderful, it works out of the box. The redux devtools with time traveling debugger and state inspector are nice, but I could live without them. The fact that all actions and state are serializable could prove very handy for logging and crash reproduction, but the future will tell how that works in practice.
The biggest problem I encountered with Redux was the advice to normalize all data, just like a database, flat records using identifiers, and lookup tables mapping identifiers to this flat state. This way of programming is error prone, you get the same problems as with pointers, and it is easy to forget to update dependent state. Libraries like redux-one help, by proving some kind of state monad to describe the changes. But again, functional programming is not nice if you have to work with flat data and identifiers IMO.
This dependency problem is exactly what FRP solves, it allows cycles with cell loops, and manages mutable state in a purely functional way, allowing to define the relationship between source and derived data in a single location. This inversion of control gives automatic glitch free updates, and local reasoning to solve large scale global problems. A dream to write large complex applications.
However I did not use Sodium for this project because Redux gave me the following benefits:
- easy undo redo, I still have no idea how to do this in FRP.
- easily create collaborative Google docs like apps, allowing realtime collaboration on the same document, by just sending all actions to a single dispatcher server.
- the debugging tools are useful
- large community
- good tutorials
However I regret not having tried Sodium for tv is prototype.
Regarding undo/redo and state serializing in Sodium, I think that this can be solved by having composite cells that always combine the state of their inner cells.
Regarding Sodium and React, I think a simple helper function that converts props of Cells to their current State is all that is needed.
I will try to create a to-do list example using these approaches, and see how that goes,