2016-12-01 70 views
1

我在使用react-apolloFlowRouter(在meteor项目中)时遇到问题。这是我的graphql查询(它应该更新各5秒):在apollo(graphql)查询中无法识别FlowRouter

@graphql(myQuery, { 
    options: { 
    pollInterval: 5000, 
    variables: { 
     userId: FlowRouter.getQueryParam('r'), 
     registerToken: FlowRouter.getQueryParam('registerToken') 
    } 
    }, 
}) 
export const default class MyComponent; 

如果我硬编码userIdregisterToken参数,查询工作就好了。
所以我想这里的问题是这些FlowRouter.getQueryParam()函数返回undefined(即使我在客户端)。如果我在MyComponent或浏览器控制台中调用它们,它们会很好地工作。

回答

1

此代码是否在网页加载时运行?我不明白为什么,但getQueryParam总是未定义页面加载? (或者你可以解析location.href

如果是这样,它的反应,所以你可以等待,直到它有一个值,然后开始查询:

Tracker.autorun(c => 
    if (FlowRouter.getQueryParam('r')) { 
    // do query 
    c.stop() 
    } 
) 
0

基于罗兰的回答,我省略了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) 

现在一切正常!