如何将clojurescript集成到现有的javascript代码库?

Lov*_*ing 3 clojure clojurescript reactjs reagent

我正在使用试剂在clojurescript中编写插件功能.我想在现有的react,flux应用程序中使用它.

我应该如何连接这两个?

Dao*_*Wen 7

由于ClojureScript编译器会吐出JavaScript代码,因此集成应该非常简单.只需将^:export注释添加到要从JavaScript代码访问的任何ClojureScript定义中.

; ClojureScript
(ns my-namespace.core)

(defn ^:export my-identity [x] x)
Run Code Online (Sandbox Code Playgroud)
// call from JavaScript
my_namespace.core.my_identity(5); // Notice how "-" is replaced with "_"
Run Code Online (Sandbox Code Playgroud)

如果要从ClojureScript代码中引用JavaScript函数/变量,只需在其前面添加全局名称js/.

; Calling global JavaScript function from ClojureScript
(js/alert "Hello!")
Run Code Online (Sandbox Code Playgroud)

有关更多示例,请查看有关ClojureScript/JavaScript interop的博客文章.

ClojureScript Cheatsheet上的JavaScript Interop部分也是一个很好的参考.例如,它记录了clj->jsjs->clj功能,您将需要使用Clojure的风格对象(关键字,矢量地图)和JavaScript风格的对象(字符串,数组,地图/对象)之间的转换.