0

ミューテーションに対してアップデーターを実行しようとしていますが、うまく機能していません。「setValue は関数ではありません」と表示され、newEvent と relayEvent で console.log を実行すると、正しいデータが返されます。お願い助けて!

私のミューテーションは機能していますが、どういうわけかデータが更新されていないため、機能していないアップデーターを実行する必要がありました

私のコードは次のとおりです。

/* @flow */

import { graphql, commitMutation } from "react-relay";
import environment from "../../../relay/environment";
import type { EventSetAttendedInput } from "./__generated__/EventSetAttendedMutation.graphql";
import { connectionUpdater } from "../../../relay/mutationUtils";

const mutation = graphql`
  mutation EventSetAttendedMutation($input: EventSetAttendedInput!) {
    EventSetAttended(input: $input) {
      event {
        id
        _id
        attended(first: 10000) {
          __typename
          edges {
            node {
              person {
                name
                _id
                id
              }
            }
          }
        }
        invitations(first: 10000) {
          __typename
          edges {
            node {
              attended
              person {
                name
                _id
                id
              }
            }
          }
        }
      }
      error
    }
  }
`;

let tempID = 0;

const commit = (input: EventSetAttendedInput, onCompleted, onError) => {
  return commitMutation(environment, {
    mutation,
    variables: {
      input: {
        ...input,
        clientMutationId: tempID++
      }
    },
    onCompleted,
    onError,
    updater: store => {
      let createAttendedField = store.getRootField("EventSetAttended");
      let newEvent = createAttendedField.getLinkedRecord("event");

      const relayEvent = store.get(input.eventId);

      console.log(`eventStore: `, newEvent);

      console.log(`relayEvent: `, relayEvent);

      store.setValue(newEvent, "event");
    }
  });
};

export default { commit };
4

1 に答える 1

1
updater: (store, data) => {
      let createAttendedField = store.getRootField("EventSetAttended");
      let newEvent = createAttendedField.getLinkedRecord("event");

      const relayEvent = store.get(input.eventId);

      relayEvent.setLinkedRecord(newEvent, "event");
    }
于 2017-10-12T16:22:44.237 に答える