Не вызываются запросы обновления Apollo?

#graphql #apollo #react-apollo

#graphql #apollo #реагировать-apollo

Вопрос:

Я изучаю Apollo pub-sub в GitHunt-React и GitHunt-API. Когда я запускаю эти приложения и ввожу новый комментарий, комментарий сохраняется вызовом submit, а затем здесь запускается кодовый блок updateQueries:

 const CommentsPageWithMutations = graphql(SUBMIT_COMMENT_MUTATION, {
  props({ ownProps, mutate }) {
    console.log('in CommentsPageWithMutations');
    return {
      submit({ repoFullName, commentContent }) { <==RUNS THE MUTATION
        debugger;
        return mutate({
          variables: { repoFullName, commentContent },
          optimisticResponse: {
            __typename: 'Mutation',
            submitComment: {
              __typename: 'Comment',
              id: null,
              postedBy: ownProps.currentUser,
              createdAt:  new Date,
              content: commentContent,
            },
          },
          updateQueries: {
            Comment: (prev, { mutationResult }) => {
              debugger; // <== RUNS AFTER THE MUTATION IS SENT TO SERVER
              const newComment = mutationResult.data.submitComment;
              if (isDuplicateComment(newComment, prev.entry.comments)) {
                return prev;
              }
              return update(prev, {
                entry: {
                  comments: {
                    $unshift: [newComment],
                  },
                },
              });
            },
          },
        });
      },
    };
  },
})(CommentsPage);
  

Я продублировал этот код в свое приложение. Мутация сохранена правильно, но блок кода updateQueries не выполняется:

 const CreateIMPageWithMutations = graphql(CREATE_IM_MUTATION, {
    props({ ownProps, mutate }) {
        debugger;
        return {
            submit({ fromID, toID, msgText }) { <==SAVES SUCCESSFULLY
                debugger;
                return mutate({
                    variables: {
                        "fromID": fromID,
                        "toID": toID,
                        "msgText": msgText
                    },
                    optimisticResponse: {
                        __typename: 'Mutation',
                        createIM: {
                            __typename: 'createIM',
                            fromID: fromID,
                            toID: toID,
                            createdAt:  new Date,
                            msgText: msgText,
                        },
                    },
                    updateQueries: {
                        createIM: (prev, { mutationResult }) => {
                            debugger; <== THIS CODE BLOCK IS NEVER CALLED
                            const newMsg = mutationResult.data.createIM;

                            return update(prev, {
                                entry: {
                                    IMs: {
                                        $unshift: [newMsg],
                                    },
                                },
                            });
                        },
                    },
                });
            },
        };
    },
})(CreateIM);
  

Почему не выполняется мой вызов updateQueries? Заранее спасибо всем за любую информацию.

Обновление: для каждого запроса, вот код CREATE_IM_MUTATION:

 const CREATE_IM_MUTATION = gql`
                mutation createIM ($fromID: String!, $toID: String!, $msgText: String!){
                    createIM(fromID: $fromID, toID: $toID, msgText: $msgText){
                        fromID
                        toID
                        msgText
                    }
                }
`;
  

Обновление: По запросу @fabio_oliveira в Slack, вот запрос, который я обновляю:

 const GETIMS_QUERY = gql`
query getIMs($fromID: String!, $toID: String!){
  instant_message(fromID:$fromID, toID: $toID){
    id,
    fromID,
    toID,
    msgText
  }
}  `;
  

Комментарии:

1. Это точно тот случай, когда data.error в результате мутации не установлен? Можете ли вы поделиться кодом, определяющим запрос под названием «createIM»?

2. … и… какая версия react-apollo?

3. React-Apollo v3.10.8. Где я могу установить точку останова, чтобы увидеть результат мутации? Мутация успешно обновляет базу данных, но я был бы очень рад взглянуть на data.error, чтобы увидеть, есть ли там что-нибудь.

4. Я обнаружил data.error в ownProps. Для загрузки установлено значение false, ожидаемые записи были возвращены в массиве, и data.error является undefined.

5. Есть ли активный запрос с именем createIM на странице?

Ответ №1:

@fabio_oliveira в Slack предоставил ответ. В updateQueries мне пришлось изменить имя ключа на getIMS, то есть имя исходного запроса на сбор данных, не имя запроса на изменение:

                 updateQueries: {
                     getIMs: (prev, { mutationResult }) => {
                        debugger;
                        [.....]