注意:这是一个抛出的反应错误。
所以我正在尝试一个实验,我根据该页面从骨干路由器渲染一个post组件。现在我知道你通常不会这样做,事情会变得混乱等等。但是再次它只是一个实验。
所以我在骨干网中有以下路线(注意反应呼叫):
AisisWriter.Routers.Posts = Backbone.Router.extend({
writer_posts: null,
posts: null,
mountNode: $('#blog-manage'),
routes : {
'': 'index'
},
initialize: function() {
this.writer_posts = new AisisWriter.Collections.Posts();
},
index: function() {
var options = { reset: true };
this.writer_posts.fetch(options).then(this.postsRecieved, this.serverError);
},
// Deal with the posts received
postsRecieved: function(collection, response, options) {
this.posts = collection;
// Walk through the posts.
$.each(this.posts, function(key, value){
// value is an array of objects.
$.each(value, function(index, post_object){
React.renderComponent(new Post({post: post_object}), this.mountNode);
});
});
},
// Deal with any server errors
serverError: function() {
console.log('There was an error trying to fetch the posts.');
}
});
这个想法是它应该在页面上吐出一个帖子标题,一个接着一个(我觉得它只会做一次)。
但问题是控制台在说:
Uncaught Error: Invariant Violation: _registerComponent(...): Target container is not a DOM element.
这是因为我试图渲染组件的方式吗?
答案 0 :(得分:10)
您将this.mountNode
设置为$('#blog-manage')
,这是一个jQuery对象(实质上是一个节点数组)。如果你做了
mountNode: $('#blog-manage')[0]
或
mountNode: $('#blog-manage').get(0)
然后您将引用实际的DOM节点。
答案 1 :(得分:3)
React.renderComponent
将组件呈现为真正的DOM元素。抛出异常是因为您没有将DOM元素作为必需的第二个参数传递。
ReactComponent renderComponent( ReactComponent component, DOMElement container, [function callback] )
将React组件渲染到提供的DOM中 容器并返回对组件的引用。
如果您只想要来自React的HTML,则可以改为使用React.renderComponentToStaticMarkup
。