Są zarówno FRP (Functional Reactive Programowanie) w ich rdzeniu - co oznacza, że mają drzewo mapowane na DOM i renderują tylko ten komponent lub dzieci, które wymagają renderowania.(jak zauważył ktoś wcześniej, Elm porzucił zasady FRP, aby realizować własne pomysły)
Obie kompilują się w JavaScript (chociaż z biblioteką ClojureScript/Om lub Reagent można uzyskać rzeczywiste obiekty React w twoim js) biały Elm robi swoje. Nie podoba mi się, że Wiąz musi być zainstalowany przez npm chociaż czapliki jak rozumiem działa na samodzielnym instalatorze)
Wiąz jest ładniejszy moim zdaniem, ponieważ zarządza stanem trochę bardziej przyjazny dla koderów i ma bardzo ładny (jak wspomniano) - składnia podobna do Haskella, a także przenosisz RuntimeErrors do CompileTimeErrors, który jest znacznie bardziej przyjemny jako programista - i ma łatwiejszą łatwość obsługi kodu. Z drugiej strony cljs ma biblioteki lotsa - niektóre z nich, jak wspomniałem, zwracają rzeczywiste składniki reakcji (cljs/Om mecze 1: 1 z R.js LifeCycle) - inne po prostu szanują mentalność FRP i LifeCycle bez obciążania się przez to. Może zajrzeć do Om/Next za pomocą metody GraphQL, która wywołuje dane z punktu końcowego i zrzuciła asynchroniczne kanały, które były używane w zwykłym cljs/Om.
To uczciwa sprawa, ale wolałabym Elm (napisany w obu językach). Jeśli jednak pójdziesz z cljs, upewnij się, że masz fajną bibliotekę i nie rób rzeczy w wanilii cljs lub będziesz żałować, gdy chcesz zachować 5k + LOC. (Szukaj Fulcro, Reagent, om, OmNext, hoplon itp.)
To pytanie może pomóc: http://stackoverflow.com/q/15490053/90874 – thSoft