Skip to content

Instantly share code, notes, and snippets.

@pengx17
Last active October 15, 2019 03:25
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pengx17/41a222d1a61acaeae42bba867d2b0d88 to your computer and use it in GitHub Desktop.
Save pengx17/41a222d1a61acaeae42bba867d2b0d88 to your computer and use it in GitHub Desktop.
Wrap a hook and return a component, see https://stackblitz.com/edit/ripook-demo?file=index.tsx
import React, { useMemo, useEffect } from 'react';
type Func<Args extends any[], Return> = (...args: Args) => Return;
/**
* Wrap a hook and return a component
*/
export function ripook<Args extends any[], Return>(hook: Func<Args, Return>) {
const RipookWrapper: React.FC<{
params: Args;
children?: (r: Return) => void;
}> = ({ children, params }) => {
const res = hook(...params);
useEffect(() => {
if (typeof children === 'function') {
children(res);
}
}, [res]); // eslint-disable-line
return <noscript />;
};
return RipookWrapper;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment