@mui/utils
Version:
Utility functions for React components.
35 lines (33 loc) • 1.13 kB
JavaScript
;
'use client';
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = useValueAsRef;
var _useEnhancedEffect = _interopRequireDefault(require("../useEnhancedEffect/useEnhancedEffect"));
var _useLazyRef = _interopRequireDefault(require("../useLazyRef/useLazyRef"));
/**
* Copied from `@base-ui/utils/useValueAsRef`.
*
* Stores the latest value in a stable ref. The ref updates after React commits,
* so effects and delayed callbacks can read the current value without depending
* on it and rerunning.
*/
function useValueAsRef(value) {
const latest = (0, _useLazyRef.default)(() => createValueRef(value)).current;
latest.next = value;
// eslint-disable-next-line react-hooks/exhaustive-deps -- effect never changes; it reads latest.next.
(0, _useEnhancedEffect.default)(latest.effect);
return latest;
}
function createValueRef(value) {
const latest = {
current: value,
next: value,
effect: () => {
latest.current = latest.next;
}
};
return latest;
}