6

작성 또는 업데이트시 트리거되는 upsert 쿼리가 있습니다. 업데이트시 Apollo는 결과를 캐시에 통합하지만 생성시에는 생성하지 않습니다. 여기 Apollo 클라이언트 : Upsert 변형은 업데이트시에만 캐시를 수정하지만 생성시에는 수정하지 않습니다.

쿼리입니다 :

export const UPSERT_NOTE_MUTATION = gql` 
    mutation upsertNote($id: ID, $body: String) { 
    upsertNote(id: $id, body: $body) { 
     id 
     body 
    } 
    }` 

내 클라이언트 :

const graphqlClient = new ApolloClient({ 
    networkInterface, 
    reduxRootSelector: 'apiStore', 
    dataIdFromObject: ({ id }) => id 
}); 

서버에서 응답은 동일하다 : 두 idbody가 반환되지만 아폴로는에 새로운 ID를 추가하지 않습니다 data 캐시 개체가 자동으로.

후속 가져 오기를 트리거하지 않고 Apollo가 자동으로 data에 새 객체를 추가하도록 할 수 있습니까? 여기

이처럼 내 데이터 저장소 모습입니다 : enter image description here

UPDATE

이 문서에 따르면, 기능 updateQueries은 내 목록에 새 요소를 밀어 수 있도록되어있다 내 원본 페치 쿼리를 다시 트리거하지 않아도됩니다.

함수가 실행되지만 함수에서 반환하는 것은 완전히 무시되고 캐시는 수정되지 않습니다.

나는 같은 것을 할 경우에도 :

updateQueries: { 
     getUserAssets: (previousQueryResult, { mutationResult }) => { 
     return {}; 
     } 
    } 

아무것도 변경되지 않습니다.

업데이트 # 2

여전히 내 자산 목록을 업데이트 할 수 없습니다. updateQueries 내부

가 여기 내 previousQueryResult의 모습입니다 :

updateQueries: { 
     getUserAssets: (previousQueryResult, { mutationResult }) => { 
     return { 
      assets: [] 
      .concat(mutationResult.data.upsertAsset) 
      .concat(previousQueryResult.assets) 
     } 
     } 
    } 

그러나 상관없이 내가 돌아 무엇을, 데이터 저장소가 새로 고쳐지지 않습니다 참고로

enter image description here

, 여기 각 asset은 무엇입니까?

enter image description here

답변

0

업데이트 할 때이 변형과 관련된 쿼리를 업데이트하려면 updateQueries을 사용해야합니다. ID가 현재 시스템 내에서 음의 목록을 반환해야

query myMadeUpQuery { 
    note { 
    id 
    body 
    } 
} 

: 귀하의 질문에 쿼리의 종류 돌연변이의 결과로 업데이트하는 것을 명시하지 않지만, 당신이 이런 식으로 뭔가가 있다고 가정 및 각 음표의 본문.updateQueries을 사용하면 콜백은 쿼리 결과 (새로 삽입 된 노트에 대한 정보)와이 쿼리의 이전 결과 (즉, 노트 목록)를 받고 콜백은 쿼리에 할당되어야하는 새로운 결과를 반환해야합니다 위. 유사한 예는 here을 참조하십시오.

updateQueries: { 
    myMadeUpQuery: (previousQueryResult, { mutationResult }) => { 
    return { 
     note: previousQueryResult.note(mutationResult.data.upsertNode), 
    }; 
    } 
} 
+0

죄송합니다. 업데이트 # 2로 내 질문을 업데이트합니다. 아직도 불행히도 제대로 작동하지 않습니다. –

1

당신이 예를 here을 따랐다 다음과 같이 본질적으로, 주어진 예에서 사용하는 immutability-helper없이, 당신은 당신의 updateQueries 콜백을 쓸 수 있을까? 나는이 같은 개의 mutate에 updateQueries을 작성합니다

updateQueries: { 
    getUserAssets: (previousQueryResult, { mutationResult }) => { 
    const newAsset = mutationResult.data.upsertAsset; 
    return update(prev, { 
     assets: { 
     $unshift: [newAsset], 
     }, 
    }); 
    }, 
} 

또는 불변성 헬퍼에서 객체 할당 대신 업데이트의 : 후반 응답 Dhaivat에 대한

updateQueries: { 
    getUserAssets: (previousQueryResult, { mutationResult }) => { 
    const newAsset = mutationResult.data.upsertAsset; 
    return Object.assign({}, prev, {assets: [...previousQueryResult.assets, newAsset]}); 
    }, 
} 
+0

답해 주셔서 감사합니다. 나는 당신의 권고 사항을 모두 시험해 보았고 효과가 없다. 나는 운 좋게도 전에 보냈던 링크를 따라 갔다. 무슨 일이 일어나고 있는지는 성공적인 graphql 요청이 성공적으로 이루어졌지만 페이지를 새로 고칠 때까지 새로 생성 된 애셋이 애셋 목록에 추가되지 않는다는 것입니다. 이것은 확실히 boggling 마음입니다. –