useRef.js 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.useCallbackRef = void 0;
  4. var react_1 = require("react");
  5. /**
  6. * creates a MutableRef with ref change callback
  7. * @param initialValue - initial ref value
  8. * @param {Function} callback - a callback to run when value changes
  9. *
  10. * @example
  11. * const ref = useCallbackRef(0, (newValue, oldValue) => console.log(oldValue, '->', newValue);
  12. * ref.current = 1;
  13. * // prints 0 -> 1
  14. *
  15. * @see https://reactjs.org/docs/hooks-reference.html#useref
  16. * @see https://github.com/theKashey/use-callback-ref#usecallbackref---to-replace-reactuseref
  17. * @returns {MutableRefObject}
  18. */
  19. function useCallbackRef(initialValue, callback) {
  20. var ref = (0, react_1.useState)(function () { return ({
  21. // value
  22. value: initialValue,
  23. // last callback
  24. callback: callback,
  25. // "memoized" public interface
  26. facade: {
  27. get current() {
  28. return ref.value;
  29. },
  30. set current(value) {
  31. var last = ref.value;
  32. if (last !== value) {
  33. ref.value = value;
  34. ref.callback(value, last);
  35. }
  36. },
  37. },
  38. }); })[0];
  39. // update callback
  40. ref.callback = callback;
  41. return ref.facade;
  42. }
  43. exports.useCallbackRef = useCallbackRef;