@dark-engine/core
Version:
The lightweight and powerful UI rendering engine without dependencies and written in TypeScript (Browser, Node.js, Android, iOS, Windows, Linux, macOS)
39 lines (38 loc) • 1.11 kB
JavaScript
import { detectIsVirtualNodeFactory } from '../view';
import { detectIsComponent, component } from '../component';
import { __useCursor as useCursor } from '../internal';
import { detectAreDepsDifferent } from '../utils';
import { memo } from '../memo';
const Memo = memo(
component(({ getValue }) => getValue()),
(p, n) => detectAreDepsDifferent(p.deps, n.deps),
);
function detectIsElement(value) {
return detectIsComponent(value) || detectIsVirtualNodeFactory(value);
}
function useMemo(getValue, deps) {
const cursor = useCursor();
const { hook } = cursor;
const { idx, values } = hook;
const state =
values[idx] ||
(values[idx] = {
deps,
value: getValue(),
});
let value = null;
let $value = null;
if (detectIsElement(state.value)) {
value = state.value;
$value = Memo({ getValue: getValue, deps });
} else {
value = detectAreDepsDifferent(state.deps, deps) ? getValue() : state.value;
$value = value;
}
state.deps = deps;
state.value = value;
hook.idx++;
return $value;
}
export { useMemo };
//# sourceMappingURL=use-memo.js.map