テンプレートリテラルで書いた GraphQL をrelay-runtime
上で実行可能な形式に変換してくれる。
実際にリクエストを実行しているクライアント。 フェッチ、読み取り、正規化を担当する。
React 上でrelay-runtime
使えるようにしてる。
import { graphql } from "relay-runtime";
export default graphql`
// $xxxはjs側からから受け取る引数
mutation sample_Mutation($id: Number!, $name: String!) {
// jsから受け取った引数をmutationの引数にセット
UpdateUserName(_set: { id: $id, name: $name }) {
// mutationの返り値
succeed
}
}
`;
なぜ動くかというと、DB の構造が全て schema に定義されているから。 作成は、
yarn run schema
type mutation_root {
UpdateUserName(_set: SendContactMail!): UpdateUserNameResponse
}
// 引数の型定義はinputから始まる
input SendContactMail {
id: Number!
name: String!
}
type UpdateUserNameResponse {
succeed: Boolean!
}
作成した mutation の型定義は、
yarn run relay
すると__generated__
以下に型定義フォルダが作成される。
import { useMutation } from 'react-relay';
export const Sample = () => {
const [commitMutation] = useMutation<updateUserName_Mutation>(mutation);
commitMutation({
id: 1,
name: "桃山みらい",
)},
onCompleted() {
alert("done!")
},
onError() {
alert("error!")
},
}
import { graphql } from "relay-runtime";
export default graphql`
query sampleQuery($company_code: String!) {
...fragment_Item @arguments(id: $id)
}
`;
export const fragment = graphql`
fragment fragment_Item on query_root // relay特有の名前
@argumentDefinitions(id: { type: "String" }) {
company_reviews_connection(
where: { id: { _eq: $id } }
) {
edges {
node {
title
}
}
}
}
`;
const data = useQuery(sampleQuery, {
id: "momoyama",
});
https://relay.dev/docs/api-reference/graphql-and-directives/#arguments