最近,我开始使用reactjsbackbonejs路由来构建一个应用程序.

我通常使用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放在自己的文件中,并在这个文件中调用它?我try 了通常的方法(与我在主干和react中使用的方法相同),但由于jsx个语法错误.

推荐答案

所以我自己想出来了.

我从这份报告中得到了必要的文件和说明:jsx-requirejs-plugin.

当我有了jsx plugin并修改了JSXTransformer版本后,我按照存储库中的说明更改了代码:

require.config({
  // ...

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

  // ...
});

然后,我可以通过jsx!插件语法引用JSX文件.例如,加载计时器.组件目录中的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语法在文件顶部放置/** @jsx React.DOM */.

希望有帮助.

Reactjs相关问答推荐

URL参数和React路由中的点

sourceBuffer. appendBuffer成功,但h5视频播放器卡住了

包装组件可以避免子组件重新渲染.?

更改购物车中的产品数量后,PayPal Reaction/Next JS按钮未更新

Redux工具包-useSelector如何通过Reducer引用InitialState?

未定义发送的数据无法在reactjs中找到原因

单击按钮不会切换组件(当按钮和组件位于两个单独的文件中时)

无法使axiosmockadapter正常工作

每次状态更改时都会提交react 表单

React Router v6 路径中的符号

Firebase Storage: 对象不存在图片上传路径错误

如何使用样式化函数为 TextField 的输入组件设置样式

React - 错误边界未捕获错误

Cypress - 替换 React 项目中的变量

如何修复 Next.js 13 中类型 AppRouterInstance 上不存在 x?

如何使用 babel 将 SVG 转换为 React 组件?

无法有条件地更新useEffect中的setState

Select MenuItem 时 Material-ui 不更改样式

在渲染不显示子元素之后,再次渲染时,子元素状态数据完全消失了.为什么会这样以及如何防止它发生?

react / firebase 基地.如何在我的项目中保存更新的数据?