Apollo GraphQL的“writeQuery”导致应用程序重新渲染,从而导致不必要的网络请求。
创始人
2024-09-09 03:00:36
0

要解决Apollo GraphQL的“writeQuery”导致应用程序重新渲染,从而导致不必要的网络请求问题,可以采取以下步骤:

  1. 使用Apollo Client的useMutation钩子,而不是writeQuery方法。useMutation钩子可以使用GraphQL mutation来更新数据,并且只会重新渲染与该Mutation相关的组件。

示例代码:

import { useMutation } from '@apollo/client';
import { UPDATE_TODO_MUTATION } from './graphql/mutations';

const TodoItem = ({ todo }) => {
  const [updateTodo] = useMutation(UPDATE_TODO_MUTATION);

  const handleComplete = () => {
    updateTodo({
      variables: { id: todo.id, completed: true },
    });
  };

  return (
    
{todo.title}
); };
  1. 在Apollo Client配置中设置fetchPolicycache-first。这将使Apollo Client首先尝试从缓存中获取数据,而不是进行网络请求。

示例代码(使用Apollo Client v3):

import { ApolloClient, InMemoryCache } from '@apollo/client';

const client = new ApolloClient({
  uri: 'https://api.example.com/graphql',
  cache: new InMemoryCache(),
  defaultOptions: {
    watchQuery: {
      fetchPolicy: 'cache-first',
    },
  },
});
  1. 避免使用refetchQueries选项。refetchQueries会导致重新执行相关查询并重新渲染组件,从而触发不必要的网络请求。相反,使用update函数来手动更新缓存中的数据。

示例代码:

import { useMutation } from '@apollo/client';
import { UPDATE_TODO_MUTATION } from './graphql/mutations';
import { GET_TODO_QUERY } from './graphql/queries';

const TodoItem = ({ todo }) => {
  const [updateTodo] = useMutation(UPDATE_TODO_MUTATION, {
    update: (cache, { data }) => {
      cache.writeQuery({
        query: GET_TODO_QUERY,
        variables: { id: todo.id },
        data: { todo: data.updateTodo },
      });
    },
  });

  const handleComplete = () => {
    updateTodo({
      variables: { id: todo.id, completed: true },
    });
  };

  return (
    
{todo.title}
); };

通过采取上述步骤,可以避免不必要的网络请求并提高应用程序的性能。

相关内容

热门资讯

2026外挂!雀友会广东潮汕麻... 2026外挂!雀友会广东潮汕麻将辅助软件,芒果辅助器(好像是有挂)1、用户打开应用后不用登录就可以直...
2026外挂!哈糖大菠萝辅助,... 2026外挂!哈糖大菠萝辅助,奇迹手游辅助脚本平台免费(一直真的有挂)1、奇迹手游辅助脚本平台免费脚...
2026外挂!辅助定制交易平台... 2026外挂!辅助定制交易平台,情怀破解(本来有挂)1、起透看视 辅助定制交易平台辅助软件价格2、随...
2026外挂!九酷众游软件,5... 2026外挂!九酷众游软件,510k中至余干辅助(原来真的是有挂)1、玩家可以在510k中至余干辅助...
2026外挂!极速官方游戏暗堡... 2026外挂!极速官方游戏暗堡辅助器,楚天游辅助(其实存在有挂)1、上手简单,内置详细流程视频教学,...
2026外挂!免费游戏辅助软件... 2026外挂!免费游戏辅助软件,如何设置钱塘十三水辅助器(切实是真的有挂)1、2026外挂!免费游戏...
2026外挂!雀姬辅助脚本,微... 2026外挂!雀姬辅助脚本,微乐游戏辅助脚本安装(切实有挂)2026外挂!雀姬辅助脚本,微乐游戏辅助...
2026外挂!飞驰娱乐软件科技... 2026外挂!飞驰娱乐软件科技,科乐填大坑辅助器(切实真的有挂)1、科乐填大坑辅助器免费辅助多个强度...
2026外挂!皮皮胡子辅助,天... 2026外挂!皮皮胡子辅助,天天贵阳破解版(原来是真的有挂)天天贵阳破解版是不是有人用挂微扑克wpk...
2026外挂!科技实测欢乐辅助... 2026外挂!科技实测欢乐辅助,丽水都莱辅助软件(都是是有挂)小薇(辅助器软件下载)致您一封信;亲爱...