Реле не обновляется после выполнения последующих мутаций

В настоящее время мы натолкнулись на проблему, связанную с мутацией в эстафете модерн. У нас есть дневник, который содержит много записей. Всякий раз, когда пользователь добавляет запись, дневной день которой не существует, мы также создаем дневник перед созданием записи. Все работает как положено, но интерфейс не обновляется сразу после мутаций. Вот код

AddDiaryMutation

import { commitMutation, graphql } from 'react-relay';

const mutation = graphql`
mutation AddDiaryMutation($input: AddDiaryInput!) {
  createDiary(input: $input) {
     diary {
        id
        ...EntryList_entries
     }
  }
}
`;

let clientMutationId = 0;

const commit = (environment, { date }, callback) =>
commitMutation(environment, {
    mutation,
    variables: {
      input: {
        date,
        clientMutationId: clientMutationId++
      }
    },
    onCompleted: response => {
    const id = response.createDiary.diary.id;
    callback(id);
  }
});

export default { commit };

AddEntryMutation получит идентификатор из ответа AddDiaryMutation для добавления записи.

import { commitMutation, graphql } from 'react-relay';
import { ConnectionHandler } from 'relay-runtime';

const mutation = graphql`
mutation AddEntryMutation($input: AddEntryInput!) {
   createEntry(input: $input) {
     entryEdge {
       node {
         id
         project {
           name
         }
         speaker {
            name
         }
        } 
      }
     }
    }
   `;

function sharedUpdater(store, diaryId, newEdge) {
    const diaryProxy = store.get(diaryId);
    const conn = ConnectionHandler.getConnection(diaryProxy, 
       'EntryList_entries');
    ConnectionHandler.insertEdgeAfter(conn, newEdge);
} 

let clientMutationId = 0;

  const commit = (environment, { diaryId, ...rest }, callback) =>
     commitMutation(environment, {
       mutation,
       variables: {
         input: {
            ...rest,
            clientMutationId: clientMutationId++
         }
       },
       updater: store => {
          const payload = store.getRootField('createEntry');
          const newEdge = payload.getLinkedRecord('entryEdge');
          sharedUpdater(store, diaryId, newEdge);
       },
       onCompleted: () => callback()
});

export default { commit };

Фрагмент EntryList

fragment EntryList_entries on Diary {
  entries(first: 20) @connection(key: "EntryList_entries", filters: []) 
{
    edges {
      node {
        ...Entry_entry
      }
    }
  }
}

Фрагмент записи

fragment Entry_entry on Entry {
  id
  project {
    name
  }
  speaker {
    name
  }
}

1 ответ

У меня были проблемы с этим обновителем также. Я рекомендую console.log для каждой переменной и вижу, где цепь тормозит. У меня есть проблемы с моим методом getConnection (и я изменяю свою схему, чтобы включить края также). Вы также можете консоль войти в магазин из вашей среды, чтобы проверить записи там.

Другие вопросы по тегам