use-async-resource
Version:
A custom React hook for simple data fetching with React Suspense
29 lines • 1.33 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.useAsyncResource = void 0;
const react_1 = require("react");
const dataReaderInitializer_1 = require("./dataReaderInitializer");
function useAsyncResource(apiFunction, ...parameters) {
const dataReaderObj = (0, react_1.useRef)(() => undefined);
(0, react_1.useMemo)(() => {
if (parameters.length) {
if (!apiFunction.length &&
parameters.length === 1 &&
Array.isArray(parameters[0]) &&
parameters[0].length === 0) {
dataReaderObj.current = (0, dataReaderInitializer_1.initializeDataReader)(apiFunction);
}
else {
dataReaderObj.current = (0, dataReaderInitializer_1.initializeDataReader)(apiFunction, ...parameters);
}
}
}, [apiFunction, ...parameters]);
const [, forceRender] = (0, react_1.useState)(0);
const updaterFn = (0, react_1.useCallback)((...newParameters) => {
dataReaderObj.current = (0, dataReaderInitializer_1.initializeDataReader)(apiFunction, ...newParameters);
forceRender(ct => 1 - ct);
}, [apiFunction]);
return [dataReaderObj.current, updaterFn];
}
exports.useAsyncResource = useAsyncResource;
//# sourceMappingURL=useAsyncResource.js.map
;