【问题标题】:React-router: component undefinedReact-router:组件未定义
【发布时间】:2015-06-04 12:47:11
【问题描述】:

我一直在浏览 here 找到的 react-router 教程,目前我很困惑......

React-router 无法识别我的组件。

(我正在使用带有 Rails 的 React.js)

代码如下:

var DefaultRoute = ReactRouter.DefaultRoute;
var Link = ReactRouter.Link;
var Route = ReactRouter.Route;
var RouteHandler = ReactRouter.RouteHandler;

var App = React.createClass({

  getInitialState: function () {
    return {
      showTags: false,
      current_user: this.props.current_user
    };
  },

  _handleToggleTags: function() {
    this.setState({
      showTags: !this.state.showTags
    })
  },
  render: function () {
    return <div>
      <Header
        onToggleTags={ this._handleToggleTags }
        user={this.props.current_user}
      />

      <RouteHandler/>

      <div id="images">
          <ImageBox/>
      </div>
    </div>;
  }
});

var routes = (
  <Route name="app" path="/" handler={App}>
    <Route name="tags" handler={TagsBox}/>
  </Route>
);

ReactRouter.run(routes, function (Handler) {
  React.render(<Handler/>, document.body);
});

如果我在 App 之前移动 TagsBox,它会起作用,但似乎没有其他人这样做。我错过了什么?

如果它有所不同,我的组件的当前结构是:

  • app.js.jsx
  • 标签
    • _tags_box.js.jsx

【问题讨论】:

  • 你能澄清一下“在应用程序之前移动标签框”的意思吗?它是在同一个文件中定义的吗?未定义的组件听起来像是缺少导入。
  • 你的 React 库是通过脚本标签加载到浏览器上的吗?
  • @AdamStone - 如果我在 App 类之前渲染 TagsBox 类
  • @PhInside 是的。它通过资产管道清单文件 cl.ly/image/2g3W3k3d251m 包含在内
  • 尝试直接在你的文件中调用 React 库。也许 var React = require(react) 我希望它会有所帮助。

标签: ruby-on-rails reactjs react-router


【解决方案1】:

在您看来,最好在加载所有脚本后运行路由器。

尝试在这段代码中封装run 方法:

document.addEventListener("DOMContentLoaded", function() {
  ReactRouter.run(routes, function (Handler) {
    React.render(<Handler/>, document.body);
  });
}

【讨论】:

  • 不过,理想情况下,您会咬紧牙关,尝试集成更现代的资产管道,例如基于webpack,因为它将有助于使依赖关系更加明确,并提供很多细节,例如热代码重载等
猜你喜欢
  • 1970-01-01
  • 2016-07-31
  • 2017-08-05
  • 2017-10-04
  • 2017-08-08
  • 1970-01-01
  • 2023-01-28
  • 2018-08-11
  • 2020-09-29
相关资源
最近更新 更多