shelving
Version:
Toolkit for using data in JavaScript.
17 lines (16 loc) • 639 B
JavaScript
import { isArrayEqual } from "../util/equal.js";
import { useProps } from "./useProps.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 = useProps();
// Update `internals` if `args` changes or `instance` is not set.
if (!internals.args || !internals.instance || !isArrayEqual(args, internals.args)) {
internals.instance = new Constructor(...args);
internals.args = args;
}
return internals.instance;
}