问题描述:
在使用Apollo的useQuery钩子时,当调用client.resetStore()后,数据不会更新。
解决方法:
import { useQuery, gql } from '@apollo/client';
const GET_DATA = gql`
query GetData {
// 查询数据的GraphQL查询
}
`;
const MyComponent = () => {
const { loading, error, data, refetch } = useQuery(GET_DATA);
const handleResetStore = () => {
// 重置Apollo客户端的缓存
client.resetStore();
// 使用refetchQueries选项重新获取数据
refetch();
};
if (loading) return Loading...
;
if (error) return Error :(
;
return (
{/* 显示数据 */}
{data && data.someData}
{/* 重置缓存按钮 */}
);
};
export default MyComponent;
在上面的示例中,我们定义了一个handleResetStore函数,当点击重置缓存按钮时,会调用client.resetStore()来重置Apollo客户端的缓存,并使用refetch()重新获取数据。
import { useQuery, gql, useLazyQuery } from '@apollo/client';
const GET_DATA = gql`
query GetData {
// 查询数据的GraphQL查询
}
`;
const MyComponent = () => {
const { loading, error, data } = useQuery(GET_DATA);
const [refetchData, { loading: refetchLoading }] = useLazyQuery(GET_DATA);
const handleResetStore = () => {
client.resetStore();
refetchData();
};
if (loading || refetchLoading) return Loading...
;
if (error) return Error :(
;
return (
{/* 显示数据 */}
{data && data.someData}
{/* 重置缓存按钮 */}
);
};
export default MyComponent;
在上面的示例中,我们使用了useLazyQuery钩子来定义一个refetchData函数,当点击重置缓存按钮时,会调用client.resetStore()来重置Apollo客户端的缓存,并使用refetchData()重新获取数据。
这些方法都可以在调用client.resetStore()后重新获取最新的数据。