2017-04-23 8 views
2

基本的に私は突然変異の後で私のUIを更新したいが、これは真に痛みであり、数日後には止まってしまった。突然変異後のApolloクライアントのアップデートで元の結果をマップできないのですか?

私のコンポーネントの中には、自分のルートクエリに依存しており、結果をマップしています。

新しいリソースを作成してルートクエリを更新するたびに、結果がもう存在しないため、元の結果はもうロードされず、can't read property map of undefinedが返されます。小切手を追加することは何もせず、ちょうど永久に読み込みを続けます。

これは私の突然変異である:

export const withCreateLink = graphql(createLink, { 
// Mutate normally gets passed as prop to wrapped component 
props({ownProps, mutate}) { 
    return { 
     // But for updating the store we're actually hijacking mutate to a custom function   
     createLink(url, description, group) { 
      return mutate({ 
       variables: { 
        url, 
        description, 
        group 
       }, 
       optimisticResponse: { 
        createLink: { 
         __typename: 'Link', 
         id: -1, 
         url, 
         description, 
         group: { 
          id: group 
         } 
        } 
       }, 
       update: (proxy, mutationResult) => { 
        const query = getAllGroups; 
        const data = proxy.readQuery({query}); 

        data.allGroups.forEach((groupData) => { 
         if(groupData.id == group) 
          groupData.links.push(mutationResult.data.createLink); 
        }); 

        proxy.writeQuery({ 
         query, 
         data 
        }) 
       } 
      }) 
     } 
    } 
} 
}); 

は、私は単に私だけのリソースが追加されたグループをリフレッシュすることによって、私のUIを更新したいです。誰か助けてくれますか?

答えて

0

トランスdataIdFromObjectは、型名をチェックするにはトリックを行います。

dataIdFromObject: (result) => { 
    if (result.id && result.__typename) { 
     return result.__typename + ':' + result.id; 
    } 
    return null; 
} 

私はちょうどIDを使用して、私のキャッシュに書き込むことができませんでしたね。これは明らかにデフォルトの提案です。

+0

これは1.0以降のデフォルトです。したがって、dataIdFromObjectを指定しないと問題はありません。 – helfer

関連する問題