- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我将首先介绍我的应用程序:简单的投票应用程序,用户可以在其中创建民意调查并进行投票。简单。
目前我的graphql模式由用户类型、民意调查类型和投票类型组成,其中用户和民意调查与其投票具有一对多关系,使用中继连接。投票类型包含对其投票者和民意调查的引用、时间戳和实际投票值。
现在,据我了解,使用连接而不是规定 graphql 列表的优点之一是能够在边缘存储数据(除了分页等等......)。我怎样才能做到这一点?
如果确实可能,我的计划是摆脱投票类型,直接通过连接连接用户和他投票的民意调查,并将投票值及其时间戳存储在连接边缘上。
如果很重要,选民和他的民意调查之间的连接应该是双向的,即每个用户都连接到他投票的民意调查,并且每个民意调查都连接到其选民。
最佳答案
听起来你已经非常接近拥有你想要的东西了。我认为使用投票类型作为用户和投票之间的中间人是一个很好的解决方案。这样做将允许您发出如下所示的查询:
// Direction 1: User -> Vote -> Poll
query GetUser($id: "abc") {
getUser(id: $id) {
username
votes(first: 10) {
edges {
node {
value
poll {
name
}
}
cursor
}
}
}
}
// Direction 2: Poll -> Vote -> User
query GetPoll($id: "xyz") {
getPoll(id: $id) {
name
votes(first: 10) {
edges {
node {
value
user {
username
}
}
cursor
}
}
}
}
在此示例中,您的投票类型是沿边缘存储信息的实体。您是正确的,连接相对于列表的一个优点是您可以沿边缘存储信息,但我想说更大的好处是能够对大量对象进行分页。
要在服务器上实现此功能,您必须为用户和投票上的连接字段(即上例中的“投票”字段)编写自定义解析方法。根据您存储数据的方式,这会发生变化,但这里有一些关于想法的伪代码。
type Vote {
value: String,
poll: Poll, // Both poll & user would have resolve functions to grab their respective object.
user: User
}
type VoteEdge {
node: Vote,
cursor: String // an opaque cursor used in the 'before' & 'after' pagination args
}
type PageInfo {
hasNextPage: Boolean,
hasPreviousPage: Boolean
}
type VotesConnectionPayload {
edges: [VoteEdge],
pageInfo: PageInfo
}
const UserType = new GraphQLObjectType({
name: 'User',
fields: () => ({
id: {
type: new GraphQLNonNull(GraphQLID),
description: "A unique identifier."
},
username: {
type: new GraphQLNonNull(GraphQLString),
description: "A username",
},
votes: {
type: VotesConnectionPayload,
description: "A paginated set of the user's votes",
args: { // pagination args
first: {
type: GraphQLInt
},
after: {
type: GraphQLString
},
last: {
type: GraphQLInt
},
before: {
type: GraphQLString
}
}
resolve: (parent, paginationArgs, ctxt) => {
// You can pass a reference to your data source in the ctxt.
const db = ctxt.db;
// Go get the full set of votes for my user. Preferably this returns a cursor
// to the set so you don't pull everything over the network
return db.getVotesForUser(parent.id).then(votes => {
// Assume we have a pagination function that applies the pagination args
// See https://facebook.github.io/relay/graphql/connections.htm for more details
return paginate(votes, paginationArgs);
}).then((paginatedVotes, pageInfo) => {
// Format the votes as a connection payload.
const edges = paginatedVotes.map(vote => {
// There are many ways to handle cursors but lets assume
// we have a magic function that gets one.
return {
cursor: getCursor(vote),
node: vote
}
});
return {
edges: edges,
pageInfo: pageInfo
}
})
}
}
})
});
您必须在相反方向的民意调查类型中执行类似的操作。要将对象添加到连接,您需要做的就是创建一个指向正确用户和帖子的投票对象。 db.getVotesForUser() 方法应该足够智能,能够意识到这是一个一对多连接,然后可以提取正确的对象。
创建处理连接的标准方法可能是一项艰巨的任务,但幸运的是,有一些服务可以帮助您开始使用 GraphQL,而无需自己实现所有后端逻辑。我为这样的一项服务工作 https://scaphold.io如果您有兴趣,我们很乐意与您进一步讨论该解决方案!
关于reactjs - react 继电器: Adding data to edges,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37983078/
我想通过注册表更改 Edge 浏览器中的主页,但它是加密的,我在注册表中看到( protected - 修改违反 Windows 策略。请参阅 aka.ms/browserpolicy)。请帮助我在注
如果我开发一个网站,它是否会以相同的方式在 IE11、Chrome、Firefox 和 edge 上运行,还是我们需要专门为 IE11 编写代码?我没有 Windows 8,因此无法在边缘浏览器上测试
如果我开发一个网站,它是否会以相同的方式在 IE11、Chrome、Firefox 和 edge 上运行,还是我们需要专门为 IE11 编写代码?我没有 Windows 8,因此无法在边缘浏览器上测试
如果 Edge 在某些机器上发生崩溃,我们需要检查日志以了解发生了什么情况。 最佳答案 Microsoft Edge 实际上是一个 Windows 进程,因此您应该能够在事件查看器中查看日志。此外,您
我们公司已将 Chrome 扩展程序移植到 Edge。扩展工作正常,但弹出窗口本身有很多重要内容。如果您在扩展设置中切换“地址栏旁边的显示按钮”,边缘扩展似乎只显示弹出按钮。这通常是一种糟糕的用户体验
我正在尝试在 Microsoft Edge 中调试崩溃的应用程序,但它提供了友好的错误页面: This page is having a problem loading We tried to loa
经过长时间的研究,我创建了我的最佳电子书 (Epub) 阅读器。作为主要设备,我基本上使用 Windows 10 平板电脑和 Microsoft Edge 作为 (Epub) 阅读器。 这是伟大的和惊
如何使用注册表或命令行获取 Microsoft Edge 浏览器版本? 我不想从 UI 中获取它。 最佳答案 对于 Microsoft Edge Legacy ,您可以使用 Get-AppxPacka
是否有可靠的编程方式来确定 Microsoft Edge 是默认浏览器? 我知道一种选择是使用 IApplicationAssociationRegistration::QueryCurrentDef
当人们在 Edge 中浏览网站时,很高兴看到“阅读 View ”按钮已启用。想要了解一个页面如何适合阅读模式。这将有助于开发人员在开发网站时牢记阅读模式。 最佳答案 答案来自 Microsoft Ed
我们在三周前向申请表提交了 Microsoft Edge 扩展:https://aka.ms/extension-request . 我们还没有收到任何反馈,在开发者仪表板中提交扩展包时,我们收到以下
我可以运行 code 从 WSL2 内部启动 VSCode。 我将如何启动 Edge(当前基于 Chromium 的 Edge)? 我试过了: ~/Code/company/workshops-web
最新版本的 Microsoft Edge 浏览器 (41.162...) 在单击后退和前进按钮时请求新页面。我在多个平台上测试了多个浏览器,只有 Edge 表现出这种行为。 这是一个 test pag
我在 Windows 1803 版本 17134.376 中使用 Microsoft Edge。 我有一个在 IIS 中本地运行的 ASP.NET Core 网站。该网站在 Edge 中可以正常打开,
Edge on Desktop 未加载谷歌字体。事实上,它甚至没有使用被定义为回退的“sans-serif”。 此行为不会在 Mobile Edge 中复制。 How it should look l
iotedge logs 暴露的日志在哪里?命令存储? 通常在 Linux 上会在哪里? 最佳答案 只需执行 docker inspect 及以下 LogPath您将获得容器的当前位置。例如。对于
我正在尝试将 Polymer 2 组件集成到现有的 SPA([ab] 使用 JSF 构建)。只要我的 POC 在 Chrome 中运行,我的基础知识就可以正常工作,我真的不在乎它是在 Shadow 还
我们的大型单页 JavaScript 应用程序在 Edge 浏览器中根本无法运行。 (我们在 Chrome 和 Firefox 中正式支持它,我们不允许在 IE 中使用它,因为它只能在那里工作一半,我
Microsoft Edge 16 中存在错误(已多次报告并在此处确认:https://developer.microsoft.com/en-us/microsoft-edge/platform/is
Microsoft Edge 16 中存在错误(已多次报告并在此处确认:https://developer.microsoft.com/en-us/microsoft-edge/platform/is
我是一名优秀的程序员,十分优秀!