I'd be interested in your feedback on what the problems you found with React where.
If I remember correctly @japgolly's criticism of cycle.js was that it was not typed at all, and that the separation between the UI and the events->Intentions mapping meant that there were many places where errors due to typos or code drift could enter the picture, and bit like when in Java Land at some point all the configuration started happening in xml files. By separating the UI component from the logic of their use in a type unsafe way he felt we were open to this type of problem. Which interestingly means that @japgolly has become more OO friendly recently :-)
As for the Scala.js Elm experiment he was a lot more positive there, as that example is typesafe, and the logic is more closely stitched together.
Hmm, that Elm example is interesting but I have an issue with it - like cycle (probably like all 'reactive' approaches) it seems to create a global ctx (channel) for handling callbacks/commands. It's good that it's strongly-typed with exhaustiveness-checking but still.... I'm wary of that. I guess you could still have 'modular' commands and lift them into a higher hierarchy but I guess I just don't like the globalness of it. It feels problematic to me.
The way I use React, components are isolated, they ask for what they need including callbacks. Each component that nests children components manages where those callbacks come from - usually they're all views/modifications to a single piece of data, which can be a composite, and so following the same principle, whichever component nests that one, it only needs to provide exactly what it needs. In A→B→C, A never knows or cares about C. I think that's great! This Elm example feels a bit like in addition to A→B→C there's also G←{A,B,C}.
The Elm author agreed with that criticism, btw.
( Mind you I am finding I am having to send quite a lot of state to the components: a Web Actor for fetching pages, the Identity of the user, the RouterCtl ( as it is very likely that any subcomponent's click may end up setting off some routing.... ( I wonder how much more? Perhaps that's all ) )
So I am back on React.js with using Rx.Vars rather than monifu - which looks really good though! Oddly enough inside the components rx.Var's seem more appropriate because when drawing a component one cannot afford to wait. One needs a component with a get that returns immediately - if only to tell us that information is being fetched on the web.
But I only spent three days exploring those alternatives, and it is certainly worth exploring the alternatives.
It may be interesting to have a pure Scala one, and develop at some point a library that would work on the client as well as on the server (Play or Akka) so that initial rendering can be easily done on the server to speed up initial page views. ( An extra bonus, though only if done elegantly, would be the ability to write pages in such a way that an application could be written for clients that did not have JS - I doubt that is possible really ).
That's a summary of the discussion as I remember it.
Let us know how your exploration goes.