不变冲突:当元素在DOM中时,目标容器不是DOM元素
Invariant Violation: Target container is not a DOM element, when element is in the DOM
所以我有一个使用主干路由器的react应用程序,但当我尝试在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
);
};
登录表单组件:
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
感谢阅读!
如果React.render中的目标div id拼写错误,也可能会出现此错误。如果您的index.html包含
<div id="foo"/>
而呈现调用是
React.render(React.createElement(App, null), document.getElementById("bar"));
则目标容器不是DOM元素被抛出(注意barid而不是foo)。
错误实际上来自LoginForm#render:
return(
React.render(
<div id="login-form-component">
</div>
)
);
那应该是
return(
<div id="login-form-component">
</div>
);
render函数应该返回虚拟dom节点,而不是装载它们。您之所以会出现错误,是因为您使用一个参数调用React.render。
相关文章:
- 在单击任何位置时隐藏元素,而不检查每次DOM单击
- 是否有任何snippet或jQuery插件可以列出easylist.txt模式匹配的DOM中的所有元素
- 在不使用JQuery的情况下隐藏DOM中的选定元素
- 如何在DOM元素上按类型构建此函数
- DOM元素和angular元素之间的主要区别是什么
- 当带有渲染器的DOM元素不在屏幕顶部时,移动了场景的坐标
- 如何使用JavaScript在没有html dom的情况下隐藏html元素
- 使用jquery创建dom元素会导致ie9出现拒绝访问错误
- 通过AJAX侦听向DOM添加某些元素
- 如何在使用Ractive.extend()时引用DOM元素
- 在d3中向DOM元素添加了图像,但现在它赢得了't过渡
- Selenium无法在浏览器DOM中定位元素
- 如何'剪切'DOM元素并将其显示在其他位置
- 转换<a>使用jQuery将文本字符串转换为dom元素
- 从dom中删除任何元素后,Touchmove事件停止触发
- d3在数据更新时错误地附加了dom元素
- 访问VueJS中的DOM元素
- 在Meteor中如何查找DOM元素(渲染后)
- 找到元素DOM的根节点(阴影或光)的最佳方法是什么?
- 在querySelector:如何获得第一个和最后一个元素?dom中使用的遍历顺序