1234567891011121314151617181920212223242526272829303132 |
- import * as React from 'react';
- /**
- * Locker return cached mark.
- * If set to `true`, will return `true` in a short time even if set `false`.
- * If set to `false` and then set to `true`, will change to `true`.
- * And after time duration, it will back to `null` automatically.
- */
- export default function useLock() {
- var duration = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 250;
- var lockRef = React.useRef(null);
- var timeoutRef = React.useRef(null);
- // Clean up
- React.useEffect(function () {
- return function () {
- window.clearTimeout(timeoutRef.current);
- };
- }, []);
- function doLock(locked) {
- if (locked || lockRef.current === null) {
- lockRef.current = locked;
- }
- window.clearTimeout(timeoutRef.current);
- timeoutRef.current = window.setTimeout(function () {
- lockRef.current = null;
- }, duration);
- }
- return [function () {
- return lockRef.current;
- }, doLock];
- }
|