簡體   English   中英

GraphQL 突變后如何更新緩存?

[英]How to update cache after GraphQL mutation?

您好,我想在對 API 的網絡請求發生變異后更新我的本地緩存。 這是我的阿波羅查詢:

    const CREATE_POST = gql`
  mutation createPost($title: String!, $body: String!, $userId: Int!) {
    createPost(title: $title, body: $body, userId: $userId) {
      title
      body
      userId
    }
  }
`;



  const [createPost] = useMutation(CREATE_POST);

const variables = { title, body, userId: numbered };
console.log('variables', variables);
createPost({
  variables,
  update(cache) {
    const results = cache.readQuery({ query: GET_POSTS });
    console.log(results);
    // cache.writeQuery({
    //   query: GET_POSTS,
    //   data: {
    //     posts: [...posts, variables],
    //   },
    // });
  },
});

我可以在數據庫中創建一個 Post,但是我還想在發出突變請求后更新我的本地 Apollo 緩存,但是當我在此處記錄結果時,我什么也沒有得到。

我是否在正確插入數據庫后實現本地緩存更新?

同樣在我的 inMemoryCache 設置的 typePolicies 中,我有深度合並

typePolicies: {
  Query: {
    fields: {
      posts: {
        keyArgs: ['limit'],
        merge: (existing, incoming) => {
          console.log('existing', existing);
          console.log('incoming', incoming);
          const result = [...(existing || []), ...incoming];
          return result;
        },
      },
    },
  },

你應該使用refetch();

官方文檔-refetch

const onSubmit =  () => {
       
        const variables = { title, body, userId: numbered };
        console.log('variables', variables);
        createPost({
        variables,
        update(cache) {
            const results = cache.readQuery({ query: GET_POSTS });
            console.log(results);
            // cache.writeQuery({
            //   query: GET_POSTS,
            //   data: {
            //     posts: [...posts, variables],
            //   },
            // });
        },
        });
        refetch();

  };

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM