shelving
Version:
Toolkit for using data in JavaScript.
20 lines (19 loc) • 655 B
JavaScript
import { useRef } from "react";
import { isArrayEqual } from "../util/equal.js";
/**
* Use a memoised class instance.
* - Creates a new instance of `Constructor` using `args`
* - Returns same instance for as long as `args` is equal to previous `args`.
*/
export function useInstance(Constructor, ...args) {
const _internals = (useRef(undefined).current ??= {
instance: new Constructor(...args),
args,
});
// Update `_internals` if `args` changes.
if (!isArrayEqual(args, _internals.args)) {
_internals.instance = new Constructor(...args);
_internals.args = args;
}
return _internals.instance;
}