将react-apollo
与FlowRouter
一起使用(在meteor
项目中)时出现问题。这是我的graphql
查询(它应该每5秒更新一次):
@graphql(myQuery, {
options: {
pollInterval: 5000,
variables: {
userId: FlowRouter.getQueryParam('r'),
registerToken: FlowRouter.getQueryParam('registerToken')
}
},
})
export const default class MyComponent;
如果我对userId
和registerToken
参数进行硬编码,则查询工作正常
所以我想这里的问题是这些FlowRouter.getQueryParam()
函数返回undefined
(即使我在客户端)。如果我在MyComponent
或浏览器控制台内调用它们,它们的效果很好。
答案 0 :(得分:1)
此代码是否在页面加载时运行?我不明白为什么,但是在页面加载时总是可能getQueryParam
未定义? (或者您可以解析location.href
)
如果是这样,它是被动的,所以你可以等到它有一个值,然后开始查询:
Tracker.autorun(c =>
if (FlowRouter.getQueryParam('r')) {
// do query
c.stop()
}
)
答案 1 :(得分:0)
根据Loren的回答,我省略了FlowRouter.getQueryParam()
函数并改为使用纯JavaScript(从this SO question复制):
function getParameterByName(name, url) {
if (!url) {
url = window.location.href;
}
name = name.replace(/[\[\]]/g, "\\$&");
var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
results = regex.exec(url);
if (!results) return null;
if (!results[2]) return '';
return decodeURIComponent(results[2].replace(/\+/g, " "));
}
用法:
// query string: ?foo=lorem&bar=&baz
var foo = getParameterByName('foo'); // "lorem"
var bar = getParameterByName('bar'); // "" (present with empty value)
var baz = getParameterByName('baz'); // "" (present with no value)
var qux = getParameterByName('qux'); // null (absent)
现在一切正常!