【发布时间】:2015-01-05 08:57:14
【问题描述】:
所以我有一个使用 Backbone 路由器的反应应用程序,但是当我尝试在 DOMContentLoaded 上导航时,我得到:
Uncaught Error: Invariant Violation: _registerComponent(...): Target container is not a DOM element.
我已尝试单步执行堆栈跟踪,但无法弄清楚发生了什么,因为引发错误的方法 (ReactMount._registerComponent) 被多次命中,其中前几次不抛出错误,因为有问题的 DOM 元素在那里。我正在使用我在其他项目中使用过的组件,没有问题,并且已将所有部分剥离到最低限度以进行调试(目前未成功):
DOM 结构:
<html>
<head>
</head>
<body>
<div id="app-container">
</div>
<script src="http://fb.me/react-with-addons-0.12.0.js"></script>
<script type="text/javascript" src="js/application.js"></script>
</body>
</html>
带有路由器代码:
AppRouter.prototype.signIn = function () {
var container = document.getElementById( 'app-container' );
React.render(
<LoginForm />,
container
);
};
LoginForm 组件:
var LoginForm = React.createClass({
render: function () {
return(
React.render(
<div id="login-form-component">
</div>
)
);
},
});
路线被击中,LoginForm#render 被击中 - 我错过了什么?
这是堆栈跟踪,底部是我的路由器登录方法:
invariant
ReactMount._registerComponent
(anonymous function)
ReactPerf.measure.wrapper
ReactMount.render
ReactPerf.measure.wrapper
React.createClass.render
(anonymous function)
ReactPerf.measure.wrapper
(anonymous function)
ReactPerf.measure.wrapper
ReactComponent.Mixin._mountComponentIntoNode
Mixin.perform
ReactComponent.Mixin.mountComponentIntoNode
(anonymous function)
ReactPerf.measure.wrapper
ReactMount.render
ReactPerf.measure.wrapper
AppRouter.signin
感谢阅读!
【问题讨论】:
-
将
console.log(document.getElementById( 'app-container' ))放入.signIn 中,只是为了检查。 99% 的情况下,这意味着您将 undefined 或 null 作为第二个参数传递。 -
我在阅读了关于 SO 的类似问题后进行了检查,并且该元素存在 :)
标签: javascript reactjs backbone-routing reactjs-flux