我喜欢在我的Meteor App上使用服务器渲染包,使用React和React-Router v4。但是,onPageLoad事件返回错误:
Error running template: TypeError: Meteor.subscribe is not a function
它在createContainer函数上:
export default createContainer(() => {
const postsHandle = Meteor.subscribe('post');
const loading = !postsHandle.ready();
const postsList = Post.find({ 'draft': false }).fetch();
const listExists = !loading && !!postsList;
return {
loading,
listExists,
posts: listExists ? postsList : [],
};
}, PostList);
如果我在服务器上,我不明白如何在null上获得Meteor.subscribe。
有人知道我的问题吗?
谢谢社区!
答案 0 :(得分:0)
我遇到了同样的错误,因为正如评论中所提到的,没有“Meteor.subscribe”这样的错误。在服务器上,所以当代码通过sink对象传递到服务器上时,会引发错误。 您应该将订阅包装在if(Meteor.isClient)中,即使您的客户端代码仅在客户端上运行。
也可能出现其他问题,假设您正在尝试读取screen.width等类型的属性,则必须像上面那样将其包装
所以你的代码变成了
export default createContainer(() => {
var loading,listExists = false
var postsList= []
if(Meteor.isClient){
const postsHandle = Meteor.subscribe('post');
loading = !postsHandle.ready();
postsList = Post.find({ 'draft': false }).fetch();
listExists = !loading && !!postsList;
}
return {
loading,
listExists,
posts: listExists ? postsList : [],
};
}, PostList);
这应该可以正常工作,只需要处理变量和功能范围