我有一些更复杂的数据结构导致深度嵌套的图形。现在我总是通过root查询获取/重新加载。但是我认为这不是最好的方法,因为它始终需要服务器来解析整个树。
是否可以在第二个请求中获取/重新加载嵌套图中的子边缘的附加数据/边缘而不遍历整个树?
如果是,如何?
例如:我有一个
ws.onmessage = function(event:Event) {
this.myData = JSON.parse(event.data);
}.bind(this);
显示项目列表我没有在初始请求中加载任务。如果用户打开一个项目,我想花时加载只有这个项目的任务,而不需要从RootQuery重新加载父/ root或整个树。
答案 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