Sono entrambi FRP (Programmazione reattiva Funzionale) al loro centro - il che significa che hanno un albero mappato al DOM e rendono solo il rendering di quel componente o dei bambini che devono essere resi.(come qualcuno ha sottolineato prima, Elm ha abbandonato i principi FRP per perseguire la propria idea)
Entrambi compilano in JavaScript (sebbene con la libreria ClojureScript/Om o Reagent si possano ottenere oggetti React effettivi nel proprio js) bianco Elm fa le sue cose. Non mi piace che Elm debba essere installato tramite npm anche se czapliki come capisco sta lavorando su un programma di installazione standalone)
Elm è più bello secondo me perché gestisce lo stato un po 'più coder friendly e ha una molto bella (come detto -) Sintassi di Haskell-like e anche spostare RuntimeErrors in CompileTimeErrors che è molto più piacevole come sviluppatore - in più ha una più semplice manutenibilità del codice. D'altra parte, cljs ha molte librerie - alcune di esse come ho già detto restituiscono i componenti React reali (cljs/Om corrisponde a 1: 1 con R.js LifeCycle) - altri semplicemente rispettano la mentalità FRP e LifeCycle senza diventare ingombranti da esso. Potrebbe desiderare di esaminare Om/Next con un modo GraphQL di chiamare i dati da un endpoint e ha eliminato i chan asincroni che sono stati usati in plain cljs/Om.
E 'una questione di gusto ad essere onesti, ma io per primo preferirei Elm (avendo scritto in entrambe le lingue). Se invece va con cljs assicuratevi di avere una bella libreria e non fare roba in cljs vaniglia o te ne pentirai quando si desidera mantenere 5k + LOC. (Guardare in alto Fulcro, reagente, om, OmNext, hoplon , ecc)
Questa domanda potrebbe dare qualche aiuto: http://stackoverflow.com/q/15490053/90874 – thSoft