rc-hooks
Version:
React Hooks Library.
36 lines (35 loc) • 1.23 kB
JavaScript
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;
;