UNPKG

@clayui/shared

Version:

ClayShared component

32 lines (30 loc) 1.12 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useDebounce = useDebounce; var _react = _interopRequireDefault(require("react")); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } /** * SPDX-FileCopyrightText: © 2019 Liferay, Inc. <https://liferay.com> * SPDX-License-Identifier: BSD-3-Clause */ // Credits to Gabe Ragland // (https://dev.to/gabe_ragland/debouncing-with-react-hooks-jci) function useDebounce(value, delay) { const [debouncedValue, setDebouncedValue] = _react.default.useState(value); _react.default.useEffect(() => { const handler = setTimeout(() => { setDebouncedValue(value); }, delay); return () => { clearTimeout(handler); }; }, // This is required when the `object` has lost the // reference plus the values are the same, `React.useEffect` // uses `Object.is` or equivalent under the covers. // For some reason the reference is being lost. typeof value === 'object' && value !== null ? [...Object.keys(value), ...Object.values(value)] : [value]); return debouncedValue; }