(なんかあった時に見れるように、見せれるようにメモとして残しています。間違ったことが書いてあったらすみません。指摘は大歓迎です)
Relay Cursor Connectionsの仕様概略
https://facebook.github.io/relay/graphql/connections.htm
仕様に沿ったコネクションタイプを定義することで、カーソルを使ったrelayサポートのページングができるようになる
Connectionタイプ
定義
- 名前がConnectionで終わる
- edges, pageInfoというフィールドを持つ
フィールド
- edges
- Edgeタイプのリストが返る
- pageInfo
- non-nullのPageInfoというオブジェクトが返る
Edgeタイプ
定義
- Connectionタイプのedgesフィールドから返る
- node, cursorというフィールドをもつ
フィールド
- node
- Scalar, Enum, Object, Interface, Union, もしくはNon‐Nullのカスタムタイプを返す
- リスト型は返せない
- cursor
- StringかStringにシリアライズできるタイプを返す
- 不明瞭な文字列が入る(例 Mg==)
引数
カーソルの後ろからデータをフェッチするとき
- first ... フェッチするデータの数
- after ... カーソル
カーソルの前からデータをフェッチするとき
- last ... フェッチするデータの数
- before ... カーソル
firstとlastを同時に含むのは非推奨(僕もまだ理由をしっかり理解していない)
https://facebook.github.io/relay/graphql/connections.htm#sec-Pagination-algorithm
PageInfoオブジェクト
定義
- hasNextPage, hasPreviousPageというboolean型のフィールドを持つ
フィールド
-
hasNextPage
- after, firstがクエリの引数としてセットされた場合hasNextPageを必ず持つ必要がある
- hasPreviousPageは持たなくても良い
-
hasPreviousPage
- last, beforeがクエリの引数としてセットされた場合hasPreviousPageを必ず持つ必要がある
- hasNextPageは持たなくても良い