0

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 应用程序文件中使用 < Button /> 或 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 的函数。不知道如何解决这个..

如果有助于澄清,我可以对此进行更多解释。如果有人有参考演示项目或可以链接到我的任何资源,那也将非常有帮助。

4

1 回答 1

0

我只有几个建议:

  • 您可以尝试构建一个新的示例项目来使用您的库,lein new figwheel myproject并使用 JavaScript 互操作来一步一步接近使用您的库的本机 JS 方式。

  • 您可以创建一个可以使用 JS 对象的接口命名空间,并将这些对象包装到 Clojure 数据结构中,以整理出您看到的协议错误,例如。接受一个props参数并传递(js->clj props)给下面其余代码的函数。

  • 对于权威来源,检查试剂文档,尤其是这个:http ://reagent-project.github.io/docs/master/InteropWithReact.html#creating-react-components-from-reagent-components

于 2019-06-22T21:23:11.303 回答