AWS Amplify GraphQLの操作 - TypeScriptとHooksを使ったPart 3 [Mutations]
Mat Warger のプロフィール画像
投稿日:2019年7月29日 • 更新日:2019年8月1日
ミューテーションについてさっと見ていきましょう。この記事は短いです。Amplifyはミューテーションを割と簡単にしてくれるし、GraphQLミューテーションの形式も、これまで見てきたクエリにかなり似ています(これまでのシリーズの投稿で詳しく説明しています)。
Mutations
ミューテーションの準備をするために、前セクションで見たクエリの一部を見ていきましょう。
const fetchQuery = async (query: string, variables?: VariablesType) => {
try {
setLoading(true);
const { data } = (await API.graphql(
graphqlOperation(query, variables)
)) as {
data: ResultType;
};
setData(data);
} catch (error) {
console.log(error);
setError(error);
} finally {
setLoading(false);
}
};
Amplifyを使ったGraphQL APIの呼び出しは全て、graphqlOperation
関数を使います。これを再利用できるので、データの返却を扱うもう一つの関数を作りましょう。
export const gqlOp = async <
ResultType extends {},
VariablesType extends {} = {}
>(
query: string,
variables?: VariablesType
) => {
const { data } = (await API.graphql(graphqlOperation(query, variables))) as {
data: ResultType;
};
return data;
};
この小さな関数をfetch呼び出しの代わりに使えます。
const fetchQuery = async (query: string, variables?: VariablesType) => {
try {
setLoading(true);
const data = await gqlOp<ResultType, VariablesType>(query, variables)
setData(data);
} catch (error) {
console.log(error);
setError(error);
} finally {
setLoading(false);
}
};
これで準備が整いました。ミューテーションのための関数を作りましょう。
export const mutation = async <
ResultType extends {},
VariablesType extends {} = {}
>(
query: string,
variables?: VariablesType
) => gqlOp<ResultType, VariablesType>(query, variables);
はい、これで終わりです。読んでいただきありがとう!
次回はサブスクリプションに挑戦するので、お楽しみに。
こちらの記事はdev.toの良い記事を日本人向けに翻訳しています。
https://dev.to/mwarger/aws-amplify-graphql-operations-with-typescript-and-hooks-part-3-mutations-1f66