最近,我开始reactjs与backbonejs路由器一起使用来构建应用程序。
reactjs
backbonejs
我通常将use requirejs用于依赖项和代码管理。但是,当我尝试包含包含jsx语法的文件时会出现问题。
requirejs
jsx
这就是我目前所拥有的router.js:
router.js
define(["backbone", "react"], function(Backbone, React) { var IndexComponent = React.createClass({ render : function() { return ( <div> Some Stuff goes here </div> ); } }); return Backbone.Router.extend({ routes : { "": "index" }, index : function() { React.renderComponent(<IndexComponent />, document.getElementById('index')); } }); });
如何将IndexComponent放在其自己的文件中并在此文件中调用它?我尝试了通常的方法(与骨干和反应相同),但是由于jsx语法错误。
所以我自己弄清楚了。
我从此仓库获得了必要的文件和说明:jsx- requirejs-plugin。
一旦有了jsx插件和JSXTransformer的修改版本,就按照存储库中的说明更改了代码:
require.config({ // ... paths: { "react": "path/to/react", "JSXTransformer": "path/to/JSXTransformer", "jsx": "path/to/jsx plugin" ... } // ... });
然后,我可以通过jsx!插件语法引用JSX文件。例如,要加载组件目录中的Timer.jsx文件,请执行以下操作:
jsx!
require(['react', 'jsx!components/Timer'], function (React, Timer) { ... React.renderComponent(<Timer />, document.getElementById('timer')); ... });
我还可以使用相同的代码访问.js其中包含jsx语法的文件:
.js
另外,我不需要/** @jsx React.DOM */使用jsx语法将文件放在顶部。
/** @jsx React.DOM */
希望能帮助到你。