Meteor Server Side渲染数据

时间:2017-08-08 16:12:48

标签: reactjs meteor react-router

我的问题在于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>
  );
}

我的问题是服务器端加载的数据一旦加载就不会留在客户端上:(

有人有想法吗?

比你的社区!

1 个答案:

答案 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({})中的过滤器也必须与服务器相关。