在apollo(graphql)查询

时间:2016-12-01 16:35:29

标签: reactjs meteor graphql apollostack react-apollo

react-apolloFlowRouter一起使用(在meteor项目中)时出现问题。这是我的graphql查询(它应该每5秒更新一次):

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

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

2 个答案:

答案 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)

现在一切正常!