https://www.reddit.com/r/Clojure/comments/4el0xi/how_to_use_an_existing_reactjs_component_with/
这是一篇有关在CLJS / Reagent项目中使用现有ReactJS组件的现有文章。我正在寻找相反的方向。我有很多CLJS组件,想将它们编译成某种ui库,以便React开发人员可以使用它们。也就是说,如果我有一个按钮CLJS组件,我希望能够在React / js应用程序文件中使用或mylib.Button(_)等来呈现该按钮。
我已经广泛阅读了此书-https://shadow-cljs.github.io/docs/UsersGuide.html#target-node-library-但效果还不太理想。我一直在使用“:target:node-library”,我可以得到一些简单的函数(例如,返回字符串/数字)来在我的应用程序中进行编译和工作,等等。但是它不适用于整个组件。例如,我的cljs按钮组件包含:
defn button [props & children]
但是当我尝试传递这些参数(我在App.js文件中调用{lib.button({},{})})时,出现诸如“未定义协议方法IMap.-dissoc”之类的错误,我相信,因为我正在尝试将JS对象传递给仅CLJS的函数。不确定如何解决此问题。
如果可以帮助澄清,我可以对此进行更多解释。如果有人有参考演示项目或可以链接到我的任何资源,那也将非常有帮助。
答案 0 :(得分:0)
我只有几个建议:
您可以尝试构建一个新的示例项目以使用lein new figwheel myproject
来使用您的库,并使用JavaScript interop一次将步骤向更接近使用库的本机JS方式移动。
您可以创建一个可以使用JS对象的接口名称空间,并将它们包装到Clojure数据结构中,以解决所看到的协议错误,例如。带有props
参数并向下传递(js->clj props)
到下面的其余代码的函数。
有关权威信息,请检查试剂文档,尤其是:http://reagent-project.github.io/docs/master/InteropWithReact.html#creating-react-components-from-reagent-components