ApolloClient在分页操作时在mutation后自动refetch的解决方法
创始人
2024-09-09 08:00:44
0

在 Apollo Client 中,当进行分页操作时,经常会使用到 refetch 方法来重新拉取数据。但是,在进行了某些 mutation 操作后,需要在 refetch 时包含上一次的变化。这时,可以使用 update 方法来手动更新 Apollo cache,然后再触发 refetch。

示例代码:

import { useMutation } from '@apollo/client';
import { gql } from 'apollo-boost';

const MUTATION_CREATE_ITEM = gql`
  mutation CreateItem($name: String!, $priority: Int!) {
    createItem(input: { name: $name, priority: $priority }) {
      item {
        id
        name
        priority
      }
    }
  }
`;

const QUERY_GET_ITEMS = gql`
  query GetItems($cursor: ID) {
    items(first: 10, after: $cursor) {
      edges {
        node {
          id
          name
          priority
        }
      }
      pageInfo {
        hasNextPage
        endCursor
      }
    }
  }
`;

const ItemList = () => {
  const [createItem] = useMutation(MUTATION_CREATE_ITEM);
  const { data, loading, fetchMore, refetch } = useQuery(QUERY_GET_ITEMS);

  const handleSubmit = async (e) => {
    e.preventDefault();
    await createItem({
      variables: {
        name: e.target.elements.name.value,
        priority: parseInt(e.target.elements.priority.value, 10),
      },
      update: (cache, { data: { createItem } }) => {
        const { item } = createItem;
        const queryResult = cache.readQuery({
          query: QUERY_GET_ITEMS,
        });
        const { edges } = queryResult.items;
        const firstEdge = edges[0];

        // Add the new item to the Apollo cache
        cache.writeQuery({
          query: QUERY_GET_ITEMS,
          data: {
            items: {
              edges: [
                {
                  node: {
                    id: item.id,
                    name: item.name,
                    priority: item.priority,
                    __typename: 'ItemNode',
                  },
                  cursor: firstEdge.cursor - 1,
                  __typename: 'ItemNodeEdge',

相关内容

热门资讯

分享开挂!新二号辅助下载,微乐... 微乐手游脚本辅助是一款可以让一直输的玩家,快速成为一个“必胜”的ai辅助神器,有需要的用户可以加我微...
曝光辅助!雀友会钻石辅助器潮汕... 您好:雀友会钻石辅助器潮汕麻将这款游戏可以开挂的,确实是有挂的,很多玩家在这款游戏中打牌都会发现很多...
发现开挂!雀友会广东潮汕辅助透... 发现开挂!雀友会广东潮汕辅助透视,樱花之盛能不能开挂(盘点一款开挂辅助下载);1、很好的雀友会广东潮...
正品辅助!微信小程序财神十三章... 正品辅助!微信小程序财神十三章特殊牌,蜀渝牌乐汇挂机软件(推荐一款开挂辅助工具)【无需打开直接搜索加...
分享辅助!皇豪互娱科技,aap... aapoker怎么控制牌开挂教程视频分享装挂详细步骤在当今的网络游戏中,aapoker怎么控制牌作为...
推荐开挂!全游大厅拼十辅助,w... 推荐开挂!全游大厅拼十辅助,wepoker新号好一点吗(我来向大家传授开挂辅助安装);无需打开直接搜...
正版开挂!新九哥辅助,九江讨赏... 正版开挂!新九哥辅助,九江讨赏辅助中至小程序(透视辅助开挂辅助安装)>>您好:软件加13670430...
发现开挂!新超圣正版辅助,aa... >>您好:aapoker安装包怎么使用确实是有挂的,很多玩家在这款aapoker安装包怎么使用游戏中...
通报开挂!随意玩透视辅助软件,... 通报开挂!随意玩透视辅助软件,道游互娱透视辅助截图(最新技巧开挂辅助脚本) >>您好:软件加薇136...
正品开挂!新道游戏辅助器安装包... 您好:这款新道游戏辅助器安装包游戏是可以开挂的,确实是有挂的,很多玩家在这款新道游戏辅助器安装包游戏...