使用reactjs和requirejs

myu*_*suf 69 javascript frontend requirejs reactjs

最近,我开始使用reactjs连同backbonejs路由器来构建应用程序.

我通常requirejs用于依赖和代码管理.但是,当我尝试包含包含jsx语法的文件时出现问题.

到目前为止,这就是我的意思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'));
    }
  });
});
Run Code Online (Sandbox Code Playgroud)

如何将IndexComponent放在自己的文件中并在此文件中调用它?我已经尝试了通常的方法(与我使用的主干和反应相同)但由于jsx语法而出错.

myu*_*suf 98

所以我自己弄清楚了.

我从这个repo获得了必要的文件和指令:jsx-requirejs-plugin.

有一次,我JSX插件和修改的版本JSXTransformer,我改变了我的代码存储库中的指示:

require.config({
  // ...

  paths: {
    "react": "path/to/react",
    "JSXTransformer": "path/to/JSXTransformer",
    "jsx": "path/to/jsx plugin"
    ...
  }

  // ...
});
Run Code Online (Sandbox Code Playgroud)

然后,我可以通过jsx!插件语法引用JSX文件.例如,要加载组件目录中的Timer.jsx文件:

require(['react', 'jsx!components/Timer'], function (React, Timer) {
   ...
   React.renderComponent(<Timer />, document.getElementById('timer'));
   ...
});
Run Code Online (Sandbox Code Playgroud)

我也可以使用相同的代码访问.js其中包含jsx语法的文件:

require(['react', 'jsx!components/Timer'], function (React, Timer) {
   ...
   React.renderComponent(<Timer />, document.getElementById('timer'));
   ...
});
Run Code Online (Sandbox Code Playgroud)

另外,我不需要/** @jsx React.DOM */使用jsx语法放在文件的顶部.

希望能帮助到你.

  • 有点困惑的是"我也可以使用相同的代码访问其中包含jsx语法的.js文件的代码片段:".它与上面的相同.我发现如果我在require模块中使用JSX,我也需要将同一模块作为jsx文件(并使用你所说的jsx插件加载).您是否可以更新您的示例,以便更清楚地了解如何组织*your*代码而不仅仅是react/jsx代码.例如,你的Timer模块是什么样的?你给使用Timer的模块提供了什么名称?如何加载require? (2认同)