GraphQL在嵌套图中提取子标记的其他数据

时间:2016-11-17 10:06:10

标签: facebook-graph-api graphql graphql-js apollostack apollo-server

我有一些更复杂的数据结构导致深度嵌套的图形。现在我总是通过root查询获取/重新加载。但是我认为这不是最好的方法,因为它始终需要服务器来解析整个树。

是否可以在第二个请求中获取/重新加载嵌套图中的子边缘的附加数据/边缘而不遍历整个树?

如果是,如何?

例如:我有一个

ws.onmessage = function(event:Event) {
    this.myData = JSON.parse(event.data);
}.bind(this);

显示项目列表我没有在初始请求中加载任务。如果用户打开一个项目,我想花时加载只有这个项目的任务,而不需要从RootQuery重新加载父/ root或整个树。

1 个答案:

答案 0 :(得分:2)

简答: 不,您无法查询未列为根查询类型定义字段的数据。

答案很长: 虽然如果不向根查询添加字段是不可能的,但只需添加tasks查询并使用参数即Project id即可实现您所寻找的行为。然后在您的客户端中,当您查询projects时,请不要询问他们的任务优势,而只需在需要时发送单独的查询tasks(projectId: ID)

在apollo的GitHunt示例中,他们正在做同样的事情来查询每个repo的评论列表,甚至在用户将鼠标悬停在repo的链接上时预取数据。这当然是半渴望的行为,而不是懒惰,所以你可以在那里做出自己的选择。

GraphQL的未来功能可让您在准备就绪时@stream向客户提供任务列表,并且@defer您希望在没有任何字段的情况下<script> function removeCommas(nStr) { if (nStr == null || nStr == "") return ""; return nStr.toString().replace(/,/g, ""); } function NumbersOnly(myfield, e, dec,neg) { if (isNaN(removeCommas(myfield.value)) && myfield.value != "-") { return false; } var allowNegativeNumber = neg || false; var key; var keychar; if (window.event) key = window.event.keyCode; else if (e) key = e.which; else return true; keychar = String.fromCharCode(key); var srcEl = e.srcElement ? e.srcElement : e.target; // control keys if ((key == null) || (key == 0) || (key == 8) || (key == 9) || (key == 13) || (key == 27)) return true; // numbers else if ((("0123456789").indexOf(keychar) > -1)) return true; // decimal point jump else if (dec && (keychar == ".")) { //myfield.form.elements[dec].focus(); return srcEl.value.indexOf(".") == -1; } //allow negative numbers else if (allowNegativeNumber && (keychar == "-")) { return (srcEl.value.length == 0 || srcEl.value == "0.00") } else return false; } </script> <input name="txtDiscountSum" type="text" onKeyPress="return NumbersOnly(this, event,true)" /> 。您的方案可能有一个更好的解决方案,不需要发送第二个查询。

有关详细信息,请查看李的演讲:https://youtu.be/ViXL0YQnioU?t=12m50s