Graphene Djangoをreact-router-relayで使用する方法を理解するのに本当に問題があります。のは、私は私のDjangoのサーバー上GraphiQLコンソールから、次のGraphQLクエリの罰金を使用することができましょう:Graphene Djangoとreact-router-relay
query {
allThreads {
edges {
node {
id
}
}
}
}
これはおそらくリレーがルートクエリの接続をサポートしていないため使用commmon viewer
ラッパーへのグラフェンの代替手段です。ですから、私はallThreadsが本当に(ThreadNodeConnection型の)ノードであり、私が照会できるエッジ接続を持っていることを理解しています。
問題は、私はRelayでこれをどのように使用するか、特にreact-router-relayを理解できません。
fragments: {
store:() => Relay.QL`
fragment on Query {
allThreads (first:300) {
edges {
node {
// child's fragment included here
}
},
}
}
`,
},
のWebPACKの私のライブスキーマに対してチェックこの、それが好き:私は(他の場所で子スレッドコンポーネントとの)このようなことにフラグメントと反応するビューを持っています。それから私は、ルータのための私のindex.jsに次のように作成します。私は私が間違っViewerQueriesをやって把握するため
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')
)
は、すでに私はちょっとわからない感じだけど、誰もが対応するために、これを使用しているため、それは知っているのは難しいですそれらのGraphQL接続にはviewer
ラッパーが入っていますが、Grapheneは各接続ごとに異なるラッパーを持っていますので、これは私の単一ルートでしか機能しないかもしれませんが、今は大丈夫です。 Webpackはそれを再びスキーマに対して好きです。私はページをロードするときしかし、私は「悪い要求」とエラーが出ること:
「フラグメントF1は、タイプのクエリでなることはありませんタイプ ThreadNodeConnectionのオブジェクトとして、ここで普及することはできません」
Graphene Djangoがどのようにスキーマを構築するか、またはGraphQLフラグメントをどのように書くべきか、あるいはルートクエリをどのように書くべきかについて、何かをはっきりと理解していないからです。問題は、これらのうちのどれが間違っているかわからず、これらの特定の技術の組み合わせを使用している人の周りにはリソースがないようです。
完全を期すために、私のグラフェン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
プロジェクト/ schema.py:
class Query(project.threads.schema.Query, graphene.ObjectType):
pass
schema = graphene.Schema(query=Query)
誰もが以前にこの特定の組み合わせを使用し、アドバイスがあれば、それは素晴らしいだろう。
これは実際にはグラフェンではありません。あなたがしようとしているのは、接続フィールドをルートフィールドとして使用することです。これはリレー1ではサポートされていませんが、リレー2にある必要があります。完全な説明はここにあります:https://github.com/facebook/relay/issues/112 –
私はそうではないと思います。 。 Grapheneは、すべての接続をラップすることで接続時の問題を解決します。そのため、接続はエッジ接続が使用可能なノードになります。 –
"fragment on Query"と気付きました。エラーが示唆しているようにThreadNodeConnectionでフラグメントを試しましたか? –