在 apollo (graphql) 查询中无法识别 FlowRouter
Posted
技术标签:
【中文标题】在 apollo (graphql) 查询中无法识别 FlowRouter【英文标题】:FlowRouter is not recognized inside of an apollo (graphql) query 【发布时间】:2017-04-16 09:32:16 【问题描述】:我在使用 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
或浏览器控制台中调用它们,它们会很好地工作。
【问题讨论】:
【参考方案1】:此代码是否在页面加载时运行?我不明白为什么,但也许getQueryParam
在页面加载时总是未定义? (或者你可以解析location.href
)
如果是这样,它是响应式的,所以你可以等到它有一个值,然后开始查询:
Tracker.autorun(c =>
if (FlowRouter.getQueryParam('r'))
// do query
c.stop()
)
【讨论】:
【参考方案2】:根据 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)
现在一切正常!
【讨论】:
以上是关于在 apollo (graphql) 查询中无法识别 FlowRouter的主要内容,如果未能解决你的问题,请参考以下文章
无法在单个 GraphQL 查询中组合本地和远程数据(Next.js + Apollo)
无法在 Apollo GraphQL 的查询中使用 @client @export 变量
从 ruby gem 导出的 GraphQL 查询无法在 Xcode 项目上使用 Apollo 进行编译