UNPKG

rc-hooks

Version:
36 lines (35 loc) 1.23 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = require("tslib"); var react_1 = require("react"); var useLatest_1 = tslib_1.__importDefault(require("../useLatest")); /** * 持久化 function 的 Hook。 * * @see {@link https://zh-hans.reactjs.org/docs/hooks-faq.html#how-to-read-an-often-changing-value-from-usecallback | 如何从 useCallback 读取一个经常变化的值?} * @param fn 需要持久化的函数。 * @returns 引用地址永远不会变化的 `fn`。 * @example * const [text, updateText] = useState(''); * * // 该函数不会变化 * const handleSubmit = usePersistFn(() => { * // 可以获取到最新的 state * alert(text); * }); */ function usePersistFn(fn) { var ref = (0, useLatest_1.default)(fn); var persistFn = (0, react_1.useCallback)(function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } var refFn = ref.current; return refFn === null || refFn === void 0 ? void 0 : refFn.apply(void 0, args); }, // eslint-disable-next-line react-hooks/exhaustive-deps []); return persistFn; } exports.default = usePersistFn;