mobx-easy-form
Version:
Simple and performant form library built with MobX
28 lines (23 loc) • 637 B
text/typescript
import { useRef } from "react";
function areInputsEqual(
next: ReadonlyArray<unknown>,
prev: ReadonlyArray<unknown>
) {
if (next.length !== prev.length) return false;
for (let i = 0; i < next.length; i++) {
if (next[i] !== prev[i]) return false;
}
return true;
}
export function useMemoOne<T>(
factory: () => T,
inputs: ReadonlyArray<unknown> = []
): T {
const cache = useRef<{ inputs: ReadonlyArray<unknown>; value: T } | null>(
null
);
if (cache.current === null || !areInputsEqual(inputs, cache.current.inputs)) {
cache.current = { inputs, value: factory() };
}
return cache.current.value;
}