HOC for React Query
It turns out that React Query by default uses hooks approach. If you need to access some part of library inside your class components you can use Render Props
pattern. What if you can’t use it? Below you will find High Order Component that injects queryClient
into WrappedComponent
.
interface WithReactQueryClientProps {
queryClient: QueryClient;
}
function withReactQueryClient<T extends WithReactQueryClientProps>(
WrappedComponent: React.ComponentType<T>,
) {
const displayName =
WrappedComponent.displayName || WrappedComponent.name || "Component";
const ComponentWithReactQueryClient = (
props: Omit<T, keyof WithReactQueryClientProps>,
) => {
const queryClient = useQueryClient();
return <WrappedComponent {...(props as T)} queryClient={queryClient} />;
};
ComponentWithReactQueryClient.displayName = `withReactQueryClient(${displayName})`;
return ComponentWithReactQueryClient;
}