我在我的Rails项目上使用React制作Post系统。 但是当我尝试在我的主页中渲染帖子时,我收到了这个错误:
HomeController #index中的React :: ServerRendering :: PrerenderError 遇到错误" TypeError:无法调用方法' map'未定义"使用{" posts":null}预渲染PostsList时React.createClass.render((execjs):19669:38)
我的代码如上:
posts_list.js.jsx:
var PostsList = React.createClass({
getInitialState: function() {
return { posts: this.props.initialPosts };
},
render: function() {
var posts = this.state.posts.map(function(post) {
return <Post key={post.id} post={post} />;
});
return (
<div className="posts">
{posts}
</div>
);
}
});
post.js.jsx
var Post = React.createClass({
render: function() {
return (
<div className="post">
<PostTitle post={this.props.post} />
<PostBody post={this.props.post} />
</div>
);
}
});
var PostTitle = React.createClass({
render: function() {
return (
<div className="post-header">
<h2>{this.props.post.title}</h2>
<div className="post-meta">
By {this.props.post.user_id} - {this.props.post.created_at}
</div>
</div>
);
}
});
var PostBody = React.createClass({
render: function() {
return (
<div className="post-contents">
{this.props.post.body}
</div>
);
}
});
和index.html.erb
<div class="container-fluid">
<div class="col-md-8">
<h3> Posts Feed </h3>
<%= react_component('PostsList', {initialPosts: @posts }, {prerender: true}) %>
</div>
</div>
post_controller.rb
def index
@posts = Post.all
@user = current_user
end
当我使用{initialPosts:Post.All}时它的作品,但当我使用@posts时,它不是
为什么会发生这种想法?我已经在网站上发帖,@ post不是空的。
答案 0 :(得分:0)
好的,我发现了什么问题,我在家庭布局中渲染了反应,但@posts是在帖子控制器而不是家庭控制器中定义的。