31 lines
1.4 KiB
JavaScript
31 lines
1.4 KiB
JavaScript
|
"use strict";
|
||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||
|
exports.useConst = void 0;
|
||
|
var React = require("react");
|
||
|
/**
|
||
|
* Hook to initialize and return a constant value. Unlike `React.useMemo`, this is guaranteed to
|
||
|
* always return the same value (and if the initializer is a function, only call it once).
|
||
|
* This is similar to setting a private member in a class constructor.
|
||
|
*
|
||
|
* If the value should ever change based on dependencies, use `React.useMemo` instead.
|
||
|
*
|
||
|
* @param initialValue - Initial value, or function to get the initial value. Similar to `useState`,
|
||
|
* only the value/function passed in the first time this is called is respected.
|
||
|
* @returns The value. The identity of this value will always be the same.
|
||
|
*/
|
||
|
function useConst(initialValue) {
|
||
|
// Use useRef to store the value because it's the least expensive built-in hook that works here
|
||
|
// (we could also use `const [value] = React.useState(initialValue)` but that's more expensive
|
||
|
// internally due to reducer handling which we don't need)
|
||
|
var ref = React.useRef();
|
||
|
if (ref.current === undefined) {
|
||
|
// Box the value in an object so we can tell if it's initialized even if the initializer
|
||
|
// returns/is undefined
|
||
|
ref.current = {
|
||
|
value: typeof initialValue === 'function' ? initialValue() : initialValue,
|
||
|
};
|
||
|
}
|
||
|
return ref.current.value;
|
||
|
}
|
||
|
exports.useConst = useConst;
|
||
|
//# sourceMappingURL=useConst.js.map
|