我是Clojurescript的新手。我想知道如何使用Clojurescript创建HTML元素,并如何更改它们的属性。我在网上似乎找不到很多相关信息。
ClojureScript与JavaScript和浏览器有很好的互操作性。您可以直接调用JavaScript全局变量和函数来查询和操作DOM,如下所示:
(-> js/document
(.getElementById "app")
(.-innerHTML)) ; returns contents of element with id 'app'
(-> js/document
(.getElementById "app")
(.-innerHTML)
(set! "Hello Clojure!")) ; Sets new content for element
查看ClojureScript cheatsheet,了解在CLJS中与JavaScript交互的简短摘要。
然而,现代Web应用程序不是使用直接的DOM操作构建的。 @scott-lowe的回答建议使用Reagent,这是一个用于React的ClojureScript桥接器,也是当前最受欢迎的UI JS框架之一。对于开始构建Web应用程序来说是一个不错的选择。
此外,我建议查看re-frame,它基于Reagent,并为您的应用程序提供状态管理。开始的简单方法是安装Leiningen构建工具,并简单地输入lein new re-frame my-app-name
。这会为你提供一个很好的模板来开始实验。使用lein figwheel
运行应用程序,你可以立即在浏览器中看到对cljs代码的更改。开始编写的好地方是views.cljs,其中包含主应用的hiccup-like模板。
(ns example
(:require [reagent.core :as r]))
(defn simple-component []
[:div
[:p "I am a component!"]
[:p.someclass
"I have " [:strong "bold"]
[:span {:style {:color "red"}} " and red "] "text."]])
(defn render-simple []
(r/render [simple-component]
(.-body js/document)))
simple-component
被渲染到js/document
节点的body
中。Reagent组件只是一个简单的函数,但是你可以通过将这些简单函数组合在一起来组成更复杂的HTML块。