Вот что я пытаюсь выполнить: у меня есть конечная точка API graphql, которая возвращает мне объект Project, подобный этому (удаленные несвязанные поля):
{
"data": {
"Project": {
"id": "cjp4b84wkochq0167gpu8oa7h",
"requests": [
{
"id": "cjpbb6jcdpwj00167y4acl5a1",
"__typename": "Request"
},
{
"id": "cjpbbhlaxpwlx01675jzfyb0j",
"__typename": "Request"
},
{
"id": "cjpbbifg7pwmg0167s0ob1bm6",
"__typename": "Request"
},
],
"__typename": "Project"
}
}
}
Я хочу использовать apollo-link-stateчтобы добавить поле на стороне клиента ко всем этим объектам запроса, например так:
{
"data": {
"Project": {
"id": "cjp4b84wkochq0167gpu8oa7h",
"requests": [
{
"id": "cjpbb6jcdpwj00167y4acl5a1",
"expanded": false,
"__typename": "Request"
},
{
"id": "cjpbbhlaxpwlx01675jzfyb0j",
"expanded": false,
"__typename": "Request"
},
{
"id": "cjpbbifg7pwmg0167s0ob1bm6",
"expanded": false,
"__typename": "Request"
},
],
"__typename": "Project"
}
}
}
Это позволило бы мне удалить локальное состояние из моего компонента, который отображает эти запросы.Проблема в том, что когда я определяю значения по умолчанию для моего клиента ApolloClient clientState следующим образом:
const client = new ApolloClient({
clientState: {
defaults: {
Project: {
__typename: 'Project',
requests: [{ __typename: 'Request', expanded: false }],
},
},
},
});
Apollo добавляет его в качестве нового объекта Project вместо добавления его к существующему (с идентификатором):
ROOT_QUERY
Project: Project
requests: [Request]
0:
expanded: false
Project({"id":"cjp4b84wkochq0167gpu8oa7h"}): Project
▾Project:cjp4b84wkochq0167gpu8oa7h
когда я даю ему идентификатор, он добавляет поле «привет» к правильному проекту, но в запросах все еще отсутствует расширенное поле.И предоставление идентификатора работает только для конкретного проекта.
const client = new ApolloClient({
clientState: {
defaults: {
'Project({"id":"cjp4b84wkochq0167gpu8oa7h"})': {
__typename: 'Project',
hi: true,
requests: [{ __typename: 'Request', expanded: false }],
},
},
},
});
ROOT_QUERY
Project({"id":"cjp4b84wkochq0167gpu8oa7h"}): Project
▾Project:cjp4b84wkochq0167gpu8oa7h
hi: true
requests: [Request]
0:▾Request:cjpbb6jcdpwj00167y4acl5a1
...unrelated fields
1:▾Request:cjpbbhlaxpwlx01675jzfyb0j
2:▾Request:cjpbbifg7pwmg0167s0ob1bm6
Я также попытался использовать поле typeDefs для объекта clientState, например:
typeDefs: [`
schema {
query: RootQuery
}
type RootQuery {
Project($id: ID): Project
}
type Project {
id: ID!
requests: [Request]
}
type Request {
id: ID!
expanded: Boolean
}
`],
, но это не похожеизменить что-либо в кеше, и я не знаю, могу ли я дать ему значение по умолчанию, подобное этому.
Может быть, я неправильно понимаю, как работает apollo-link-state (или даже как работает graphql)ответ, чтобы указать мне в правильном направлении приветствуется.Я очень начинающий, когда дело доходит до Graphql или Apollo.