UNPKG

shelving

Version:

Toolkit for using data in JavaScript.

20 lines (19 loc) 655 B
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; }