当前位置: 首页 > 知识库问答 >
问题:

石墨烯Django和react路由器继电器

仲孙思源
2023-03-14

我很难弄清楚石墨烯Django应该如何与react路由器中继一起使用。假设我可以通过Django服务器上的GraphiQL控制台很好地使用以下GraphQL查询:

query {
  allThreads {
    edges {
      node {
        id
      }
    }
  }
}

这可能是Graphene对commmon查看器的替代,因为Relay不支持根查询上的连接。因此,我知道allThreads实际上是一个节点(类型为ThreadNodeConnection),并且有一个可以查询的边连接。

问题是我不知道如何将其与中继一起使用,尤其是对路由器中继做出反应。我有一个React视图,上面有这样一个片段(其他地方有一个子线程组件):

fragments: {
      store: () => Relay.QL`
        fragment on Query {
          allThreads (first:300) {
            edges {
              node {
                // child's fragment included here
              }
            },
          }
        }
      `,
    },

Webpack根据我的live模式检查它并喜欢它。然后我在路由器index.js中创建以下内容:

const ViewerQueries = {
  store: () => Relay.QL`query { allThreads(first:300) }`
};

ReactDOM.render(
  <Router
    forceFetch
    environment={Relay.Store}
    render={applyRouterMiddleware(useRelay)}
    history={browserHistory}
  >
    <Route path='/' component={ThreadList} queries={ViewerQueries} />
  </Router>
  , document.getElementById('container')
)

我已经觉得有点不确定了,因为我觉得我做的viewerquerys是错误的,但很难知道,因为其他人都使用它来在GraphQL连接上容纳他们的查看器包装器,但Graphene在每个连接上都有不同的包装器,所以这可能只适用于我的单个路由,但现在还可以。Webpack再次将其与架构进行对比。但当我加载页面时,我收到一个“错误的请求”,错误是:

“不能在此处传播片段F1,因为ThreadNodeConnection类型的对象永远不能是Query类型的对象”

老实说,这是我无法继续的地方,因为我显然不了解Graphene Django如何构建模式,GraphQL片段应该如何编写,或者路由查询应该如何编写。问题是我不知道这些东西中哪一个是错的,而且在使用这些特定技术组合的人周围似乎没有任何资源。

为完整起见,我的Graphene Django模式设置为(稍微简化):

项目/线程/schema.py:

class ThreadNode(DjangoObjectType):
    class Meta:
        model = Thread
        interfaces = (relay.Node, )

...

class Query(graphene.AbstractType):
    all_threads = DjangoFilterConnectionField(ThreadNode)
    thread = relay.Node.Field(ThreadNode, id=graphene.Int())

    def resolve_all_threads(self, args, context, info):
        return Thread.objects.select_related('author__profile').all()

    def resolve_thread(self, args, context, info):
        id = args.get('id')

        if id is not None:
            return Thread.objects.get(pk=id)

        return None

项目/架构。py:

class Query(project.threads.schema.Query, graphene.ObjectType):
    pass

schema = graphene.Schema(query=Query)

如果有人以前使用过这种特殊的组合,并有任何建议,那将是惊人的。

共有1个答案

秦才良
2023-03-14

我有同样的问题,经过长时间的搜索,我终于找到了这个答案https://github.com/facebook/relay/issues/1558#issuecomment-297010663

因为中继1不支持根查询的连接。你应该广告一个查看器作为一个节点接口来包装你的查询。所以在你的服务器主查询(项目/schema.py)中,你应该添加以下代码:

class Query(project.threads.schema.Query, graphene.ObjectType):
   viewer = graphene.Field(lambda: Query)
   id = graphene.ID(required=True)

   def resolve_viewer(self, args, context, info):
    return info.parent_type

   def resolve_id(self, args, context, info):
      return 1

   class Meta:
      interfaces = (graphene.relay.Node,)

现在在你的图形中,你可以像这样格式化你的查询:

query {
  viewer{
  allThreads(first:10) {
    edges {
      node {
        id
      }
    }
  }
}
}

客户端,您可以像这样创建容器:

export default Relay.createContainer(ThreadList, {
    fragments: {
        viewer: () => Relay.QL`
     fragment on Query {
          id
          allThreads(first:10){
            edges{
              node{
               id
               }
            }
          }
      }
    `,
    },
});

我希望这能帮助你

 类似资料:
  • 很抱歉有这个问题。我是一个新的web开发与绝对没有经验与GraphQL,Relay或Apollo。我刚刚完成了一个web应用程序,前端是Angulation4,后端是Django Rest框架。该应用程序运行良好,除了一些组件具有复杂的数据关系和深度数据嵌套,需要多次服务器旅行来组装一个完整的对象。而且,即使只需要名称和id就可以填充查找列表,我也无法对具有多个字段的大量对象实现选择性字段查询。因

  • 有没有人能够在同一测试中使用阿奎利安持久性扩展与阿奎利安石墨烯/硒?我有一个项目正在使用持久性&无人机/石墨烯的扩展,它们各自都工作得很好。我可以用持久性配置数据库进行集成测试,我可以用Drone做UI验收测试。 问题是当我尝试在无人机测试中使用持久性扩展时。由于某些原因,持久性扩展似乎没有执行,因为数据库从未被填充。是否需要做一些特殊的事情来使持久性扩展能够使用Arquillian在客户端模式下

  • 现在,这个脚本输出了乍一看应该输出的内容。输出的格式为,但是没有绘制图形。它们出现在石墨仪表板上,但它们是空的。我已经用Wireshark检查了发送到graphite服务器的输出。与只有LF的linux相反,在windows中,消息被附加了CRLF。我手工添加了,在一小段时间内,它确实发挥了作用,但现在它停止工作了。 我的问题是,我在传输中做错了什么,因为我一直在分析trafic,来自linux机

  • 我有一个简单的(目前)应用程序,使用react router和redux,我想为它添加国际化功能。 我已经安装了npm包,并且能够安装和运行提供的示例。我已经将适当的导入添加到我自己的应用程序中,并将国际化标签添加到根渲染方法中。 当我将I18nextProvider标记添加到render方法时,我得到了错误 找不到模块“react” 这并不是特别有用,尤其是因为如果我删除标签,react应用程序

  • 我想把react-route添加到我的应用程序中,我有下面的代码: 更新:已安装react-router 3.0.2并工作。

  • 如果我将路由折叠起来,这样看起来就像: 工作很好。我嵌套的原因是因为我将在“dashboard”下有多个子项,并且希望它们都在URL中以为前缀。