UNPKG

@maherunlocker/custom-react-table

Version:
35 lines 1.67 kB
"use strict"; // credit to https://dev.to/gabe_ragland/debouncing-with-react-hooks-jci Object.defineProperty(exports, "__esModule", { value: true }); exports.useDebounce = void 0; const react_1 = require("react"); // Our hook // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types function useDebounce(value, delay) { // State and setters for debounced value const [debouncedValue, setDebouncedValue] = (0, react_1.useState)(value); (0, react_1.useEffect)(() => { // Set debouncedValue to value (passed in) after the specified delay const handler = setTimeout(() => { setDebouncedValue(value); }, delay); // Return a cleanup function that will be called every time ... // ... useEffect is re-called. useEffect will only be re-called ... // ... if value changes (see the inputs array below). // This is how we prevent debouncedValue from changing if value is ... // ... changed within the delay period. Timeout gets cleared and restarted. // To put it in context, if the user is typing within our app's ... // ... search box, we don't want the debouncedValue to update until ... // ... they've stopped typing for more than 500ms. return () => { clearTimeout(handler); }; }, // Only re-call effect if value changes // You could also add the "delay" var to inputs array if you ... // ... need to be able to change that dynamically. [value, delay]); return debouncedValue; } exports.useDebounce = useDebounce; //# sourceMappingURL=useDebounce.js.map