@react-hookz/web
Version:
React hooks done right, for browser and SSR.
32 lines (31 loc) • 1.23 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.useHookableRef = void 0;
var react_1 = require("react");
var useSyncedRef_1 = require("../useSyncedRef/useSyncedRef");
/**
* Like `React.useRef` but it is possible to define get and set handlers.
*
* @param initialValue Initial value of a hook.
* @param onSet Function to be called while ref.current value set. Return value
* will be stored in ref.
* @param onGet Function to be called while ref.current value accessed. Return
* value will be used as a return value.
*/
function useHookableRef(initialValue, onSet, onGet) {
var onSetRef = (0, useSyncedRef_1.useSyncedRef)(onSet);
var onGetRef = (0, useSyncedRef_1.useSyncedRef)(onGet);
return (0, react_1.useMemo)(function () {
var v = initialValue;
return {
get current() {
return typeof onGetRef.current !== 'undefined' ? onGetRef.current(v) : v;
},
set current(val) {
v = typeof onSetRef.current !== 'undefined' ? onSetRef.current(val) : val;
},
};
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
}
exports.useHookableRef = useHookableRef;