代码之家  ›  专栏  ›  技术社区  ›  deagus

修复react查询中的initialData为什么不起作用

  •  0
  • deagus  · 技术社区  · 2 年前

    我尝试使用initialData编写代码,但没有任何输出,即使密钥也没有出现在react query dev工具中 enter image description here

    import { useQuery, useQueryClient } from 'react-query';
    import axios from 'axios';
    
    interface CustomError {
      message: string;
    }
    
    interface User {
      id: number;
      first_name: string;
      last_name: string;
      email: string;
      gender: string;
      ip_address: string;
      description: string;
      location: string;
      password: string;
      mac_address: string;
      url: string;
    }
    
    export async function fetchUserDataById({ queryKey }: any): Promise<User> {
      const dataId = queryKey[1]
      const response = await axios.get<User>(`http://localhost:5000/users/${dataId}`);
      return response.data;
    }
    
    export const useDataUserById = (id: number) => {
      const queryClient = useQueryClient();
    
      return useQuery<User, CustomError>(['user-data', id], fetchUserDataById, {
        initialData: () => {
          const users = queryClient.getQueryData<User[]>('one-data');
          if (users) {
            const dataUser = users?.find((userData) => userData.id === id);
            if(dataUser){
                console.log(dataUser)
                return dataUser
            }
          }
          return undefined;
        },
      });
    };
    

    解决react查询上initialData不起作用的问题

    1 回复  |  直到 2 年前
        1
  •  0
  •   kemz11px    2 年前

    看起来你需要检查查询键或数据结构,可能存在不匹配,并确保检查你试图使用 queryClient.getQueryData 已成功缓存在 queryClient

    您可以添加日志来调试每个进程。

    export const useDataUserById = (id: number) => {
      const queryClient = useQueryClient();
    
      return useQuery<User, CustomError>(['user-data', id], fetchUserDataById, {
        initialData: () => {
          // Debugging: Check the key you're using for initial data retrieval
          console.log("Initial data query key:", 'one-data');
          
          const users = queryClient.getQueryData<User[]>('one-data');
          
          // Debugging: Log the retrieved users data
          console.log("Retrieved users data:", users);
          
          if (users) {
            const dataUser = users.find((userData) => userData.id === id);
            if (dataUser) {
              // Debugging: Log the found dataUser
              console.log("Found dataUser:", dataUser);
              return dataUser;
            }
          }
          return undefined;
        },
      });
    };