Skip to content

Instantly share code, notes, and snippets.

@louis-young
Created July 19, 2023 15:01
Show Gist options
  • Save louis-young/78d2b4a080b4f5b9881694da77ca9778 to your computer and use it in GitHub Desktop.
Save louis-young/78d2b4a080b4f5b9881694da77ca9778 to your computer and use it in GitHub Desktop.
Asynchronous React component
import type { ReactNode } from "react";
interface AsynchronousComponentProps<TData> {
children: (data: NonNullable<TData>) => ReactNode;
data: TData;
isLoading: boolean;
loadingFallback: ReactNode;
hasError: boolean;
errorFallback: ReactNode;
}
export const AsynchronousComponent = <TData,>({
children,
data,
isLoading,
loadingFallback,
hasError,
errorFallback,
}: AsynchronousComponentProps<TData>) => {
return isLoading
? loadingFallback
: hasError
? errorFallback
: data
? children(data)
: undefined;
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment