UNPKG

@react-hookz/web

Version:

React hooks done right, for browser and SSR.

32 lines (31 loc) 1.23 kB
"use strict"; 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;