小编典典

将reactjs与requirejs一起使用

reactjs

最近,我开始reactjsbackbonejs路由器一起使用来构建应用程序。

我通常将use 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'));
    }
  });
});

如何将IndexComponent放在其自己的文件中并在此文件中调用它?我尝试了通常的方法(与骨干和反应相同),但是由于jsx语法错误。


阅读 726

收藏
2020-07-22

共1个答案

小编典典

所以我自己弄清楚了。

我从此仓库获得了必要的文件和说明: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文件,请执行以下操作:

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

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

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

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

希望能帮助到你。

2020-07-22