我的问题在于Meteor项目,使用React和React Router v4与服务器端渲染。
我想在客户端显示我的帖子。加载我的页面时,会显示我的posts数组,但在客户端加载后,我的posts数组为空。
我的createContainer函数:
export default createContainer(() => {
const posts = Post.find({ 'draft': false }).fetch();
return {
posts: posts
};
}, PostList);
服务器上的数据很好,但在我的客户端上,数据是空的。也许我的问题出在我的路线上?
我在客户端的路线:
const Routes = () => {
return (
<BrowserRouter>
<Switch>
<AppLayout exact path='/' component={Home} />
<AppLayout exact path="/blog" component={Blog} title={Trans.page.blog.title} />
<AppLayout path='/blog/:slug' component={Article} title={Trans.page.blog.title} subtitle />
</Switch>
</BrowserRouter>
);
}
我在服务器端的路线:
const Routes = (props) => {
const context = {};
return (
<StaticRouter location={props.location} context={context}>
<Switch>
<AppLayout exact path='/' component={Home} />
<AppLayout exact path="/blog" component={Blog} title={Trans.page.blog.title} />
<AppLayout path='/blog/:slug' component={Article} title={Trans.page.blog.title} subtitle />
</Switch>
</StaticRouter>
);
}
我的问题是服务器端加载的数据一旦加载就不会留在客户端上:(
有人有想法吗?
比你的社区!
答案 0 :(得分:0)
需要在客户端进行订阅,因为实际上它不会获取数据。
export default createContainer(() => {
if (Meteor.isClient) {
Meteor.subscribe('subName')
}
const posts = Post.find({ 'draft': false }).fetch();
return {
posts: posts
};
}, PostList);
您首先收到数据,因为它们在服务器端自动可用。这也意味着您必须非常小心所获取的数据,因为服务器端呈现将不会使用publish方法作为参考。您在Collection.find({})中的过滤器也必须与服务器相关。