在Reagent中使用React组件

时间:2016-02-18 18:40:24

标签: clojurescript reagent

我正在尝试在基于Reagent的应用程序中使用http://react-components.com中的组件(例如react-youtube),但可能我的天真方法不正确。我尝试使用lein-npm模块安装NPM软件包,在html页面中包含脚本,并通过reagent/adapt-react-class使用它们,如同this SO问题。但是除了这个样本我没有成功。

通常我会收到“未定义require / import / module”或“未定义Youtube”等错误(通过(def yt-test [] (r/adapt-react-class js/Youtube))。我对需要做什么很困惑。我读了一些关于webpack / browserify的内容,看到cljsjs包 - 是为了使这个工作所需的那些?

2 个答案:

答案 0 :(得分:7)

我写了一篇关于如何使用webpack实现这一目标的分步指南: blob.tomerweller.com/reagent-import-react-components-from-npm

一般概念与@scttnlsn建议相同:将所有npm包捆绑在外部JS文件中,并通过全局window对象公开它们。

答案 1 :(得分:3)

这些组件打包为CommonJS模块。从ClojureScript访问CommonJS模块的一种方法是将它们捆绑到一个可以包含在ClojureScript构建中的JavaScript文件中。

您需要创建一个JavaScript入口点文件,该文件需要您的各种NPM依赖项并将它们公开给ClojureScript(例如,通过在index.js上设置它们)。创建一个文件(让我们称之为window.YouTube = require('react-youtube'); ),其中包含:

npm install -g browserify
browserify index.js --standalone window > bundle.js

然后使用像Browserify这样的工具捆绑您的入口点文件及其所需的所有依赖项:

bundle.js

在您的ClojureScript版本中加入js/YouTube,您就可以通过{{1}}

从ClojureScript访问React组件