1

react-apollo使用with FlowRouter(在meteor项目中)时遇到问题。这是我的graphql查询(它应该每 5 秒更新一次):

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

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

4

2 回答 2

1

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

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

Tracker.autorun(c =>
  if (FlowRouter.getQueryParam('r')) {
    // do query
    c.stop()
  }
)
于 2016-12-01T23:01:21.177 回答
0

根据 Loren 的回答,我省略了FlowRouter.getQueryParam()函数并改用纯 JavaScript(从这个 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)

现在一切正常!

于 2016-12-02T10:03:15.177 回答