Кэш клиента Apollo не распознает отношения один к одному
У меня есть схема graphql с объектом places
который имеет взаимно однозначные отношения с другим объектом placeDetails
Я обновил свой кеш Apollo после мутации, которая вставляет placeDetails
для place
. Я используюoptimisticResponse
с моей мутацией, и все частично работает.
Проблема в том, что оптимистичный ответ ненадолго мигает на экране до того, как фактическая мутация вернется с сервера, который, кажется, перезаписывает любые ручные изменения, которые я внес в кеш в моем пользовательском update
функция. Еще один запутанный момент заключается в том, что кеш apollo правильно связывает недавно вставленныеplaceDetails
объект с правильным places
объект, но обратная связь не создается в кэше. Я проверил кеш и увидел что-то вроде этого
placeDetails:ChIJq0HUUq6ipBIRWM6qGqALmok:
places: {"__ref":"places:a60803b7-378d-4c6c-a41a-ada68f64a020"}
Но если я посмотрю на places:a60803b7-378d-4c6c-a41a-ada68f64a020
запись в кеше, для placeDetails
.
Функция обновления и оптимистичный ответ
optimisticResponse: {
__typename: "Mutation",
placeDetails: {
otherId: place.otherId, // From component calling the mutation
name: name, // From component calling the mutation
__typename: "placeDetails",
places: {
id: place.id, // From component calling the mutation
__typename: "places"
}
}
},
update: (proxy, { data }) => {
const id = `places:${place.id}`;
const fragment = gql`
id
placeDetails {
otherId
name
__typename
}
__typename
`;
const place: Place = proxy.readFragment<Place>({
fragment,
id
})!;
const updatedPlace: Place = {
...place,
placeDetails: data.placeDetails
};
proxy.writeFragment({
id,
fragment,
data: updatedPlace
});
}
}
Упрощенная мутация
mutation InsertPlaceDetails(
$otherId: String!
$name: String!
) {
insert_placeDetails(
objects: [
{
otherId: $otherId
name: $name
}
]
) {
returning {
otherId
name
__typename
places {
id
__typename
}
}
}
}
Я немного упростил пример. otherId
столбец на placeDetails
это FK к столбцу на places
. Я правильно настроил свой кеш для использования правильных идентификаторов черезdataIdFromObject
вариант конфигурации.
Любая помощь будет принята с благодарностью! При необходимости я могу предоставить более подробную информацию