Sie sind beide FRP (Functional Reactive Programming) im Kern - das heißt, sie haben einen Baum, der dem DOM zugeordnet ist und nur die Komponente oder die Kinder darstellt, die gerendert werden müssen.(wie jemand schon früher darauf hingewiesen hat, hat Elm die FRP-Prinzipien aufgegeben, um seine eigene Idee von ihnen zu verfolgen)
Sie beide kompilieren in JavaScript (obwohl mit ClojureScript/Om-Bibliothek oder Reagenz könnten Sie tatsächliche React-Objekte in Ihrem js bekommen) weiß Elm macht ihr eigenes Ding. Ich mag nicht, dass Elm über npm installiert werden muss, obwohl czapliki, wie ich verstehe, an einem Standalone-Installer arbeitet)
Elm ist meiner Meinung nach schöner, weil es Zustand ein wenig mehr coder freundlich und es hat eine sehr nette (wie erwähnt -) Haskell-artige Syntax und auch Sie verschieben die RuntimeErrors in die CompileTimeErrors, die als Entwickler viel angenehmer ist - und es hat einfachere Code-Wartbarkeit. Auf der anderen Seite, Cljs hat viele Bibliotheken - einige von ihnen, wie ich bereits erwähnte React Components (Cljs/Om 1: 1 mit R.js LifeCycle entspricht) - andere einfach die FRP und LifeCycle Mentalität respektieren, ohne zu belasten von ihm. Vielleicht möchte ich in Om/Next mit einer GraphQL-Methode zum Aufrufen von Daten von einem Endpunkt suchen und hat die asynchronen Chans, die in plain cljs/Om verwendet wurden, gelöscht.
Es ist Geschmackssache um ehrlich zu sein, aber ich würde Elm (in beiden Sprachen geschrieben) bevorzugen. Wenn Sie jedoch mit cljs gehen, stellen Sie sicher, dass Sie eine nette Bibliothek bekommen und nicht in Vanille cljs tun, oder Sie werden es leid, wenn Sie 5k + LOC pflegen wollen. (Fulcro, Reagent, Om, OmNext, Hoplon usw.)
Diese Frage könnte helfen: http://stackoverflow.com/q/15490053/90874 – thSoft