useMutation
useMutation
Reactコンポーネントでミューテーションを実行するために使用するフック。
import type {FeedbackLikeMutation} from 'FeedbackLikeMutation.graphql';
const React = require('React');
const {graphql, useMutation} = require('react-relay');
function LikeButton() {
const [commit, isInFlight] = useMutation<FeedbackLikeMutation>(graphql`
mutation FeedbackLikeMutation($input: FeedbackLikeData!) {
feedback_like(data: $input) {
feedback {
id
viewer_does_like
like_count
}
}
}
`);
if (isInFlight) {
return <Spinner />;
}
return (
<button
onClick={() => {
commit({
variables: {
input: {
id: '123',
text: 'text',
},
},
onCompleted(data) {
console.log(data);
},
});
}}
/>
);
}
引数
mutation
:graphql
テンプレートリテラルを使用して指定されたGraphQLミューテーション。
commitMutationFn
:<T: MutationParameters>(IEnvironment, MutationConfig<T>): Disposable
。* [オプション] *commitMutation
と同じシグネチャを持つ関数で、代わりに呼び出されます。デフォルトはcommitMutation
です。
戻り値
以下の値を含むタプル
- [0]
commitMutation
: ミューテーションを実行する関数- 引数、構文シグネチャは
commitMutation
API とほぼ同じです。variables
: ミューテーションに必要な変数を格納するオブジェクト。たとえば、ミューテーションが$input
変数を定義する場合、このオブジェクトにはinput
キーが含まれており、その形状はGraphQLスキーマで定義されているミューテーションで期待されるデータの形状と一致する必要があります。onCompleted
: リクエストが完了し、updater
関数を使用してインメモリRelayストアが更新されたときに実行されるコールバック関数。response
オブジェクト(生のサーバーレスポンス)を受け取ります。内部的にはエラーは許可されず、onError
ハンドラーでCRITICAL
エラーがスローされます。onError
: Relayがリクエスト中にエラーを検出した場合に実行されるコールバック関数。内部的には、サーバー上のミューテーション結果の読み取り中にCRITICAL
エラーが発生します。optimisticResponse
: ローカルインメモリストアを楽観的に更新するためのデータ(つまり、ミューテーションリクエストが完了する前にすぐに)を含むオブジェクト。このオブジェクトは、GraphQLスキーマで定義されているミューテーションのレスポンスタイプと同じ形状である必要があります。指定されている場合、RelayはoptimisticResponse
データを使用して、optimisticUpdater
が実行される*前*に、ローカルデータストア内の関連レコードのフィールドを更新します。ミューテーションリクエスト中にエラーが発生した場合、楽観的な更新はロールバックされます。optimisticUpdater
: ローカルインメモリストアを楽観的に更新するために使用する関数(つまり、ミューテーションリクエストが完了する前にすぐに)。ミューテーションリクエスト中にエラーが発生した場合、楽観的な更新はロールバックされます。この関数は、インメモリのRelayストアのプロキシであるstore
を受け取ります。この関数で、クライアントはstore
インスタンスを介してローカルデータを更新する方法を定義します。store
の使用方法の詳細については、RelayストアAPIリファレンスを参照してください。ご注意ください- フィールドの更新よりも複雑な更新(レコードの削除やコレクションへのアイテムの追加など)を行う必要がない限り、
optimisticUpdater
ではなくoptimisticResponse
オプションを渡す方が通常は好ましいです。 optimisticUpdater
を使用することにした場合、多くの場合、updater
と同じ関数にすることができます。
- フィールドの更新よりも複雑な更新(レコードの削除やコレクションへのアイテムの追加など)を行う必要がない限り、
updater
: ミューテーションからの実際のサーバーレスポンスに基づいてローカルインメモリストアを更新するために使用する関数。updater
が提供されていない場合、デフォルトでRelayはミューテーションレスポンスで参照されているレコードのフィールドを自動的に更新することを認識しますが、フィールドの更新よりも複雑な更新(レコードの削除やコレクションへのアイテムの追加など)を行う必要がある場合は、updater
を渡す必要があります。サーバーレスポンスが返されると、RelayはまずoptimisticUpdater
またはoptimisticResponse
によって導入された変更を元に戻し、その後updater
を実行します。この関数は、インメモリのRelayストアのプロキシであるstore
を受け取ります。この関数で、クライアントはstore
インスタンスを介してサーバーレスポンスに基づいてローカルデータを更新する方法を定義します。RelayストアAPIを参照してください。uploadables
: オプションのアップロード可能なマップ。アップロード可能なアイテムの数(アイテムごとに1つのキー)を表すオブジェクト。各値はFile
またはBlob
型である必要があります。- 環境引数なし:
useMutation
は、RelayEnvironmentProvider
によって提供される現在の環境を自動的に使用します。
- 戻り値
disposable
:dispose
関数を格納するオブジェクト。disposable.dispose()
を呼び出すと、楽観的な更新が元に戻され、Relayはストアを更新したり、成功/エラーコールバックを呼び出したりしなくなりますが、ネットワークリクエストがキャンセルされる保証はありません。ミューテーションが成功した後にdispose
が呼び出された場合、Relayストア内の更新はロールバックされません。
- 引数、構文シグネチャは
- [1]
areMutationsInFlight
:commitMutation
を呼び出すことによってトリガーされたミューテーションがまだ実行中の場合、true
になります。commitMutation
を複数回呼び出すと、一度に複数のミューテーションが実行中になる可能性があります。
このページはお役に立ちましたか?
簡単な質問にお答えいただき、サイトをさらに改善するお手伝いをお願いします。 いくつかの簡単な質問にお答えください.