@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)
42 lines (41 loc) • 1.26 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
exports.useMemo = void 0;
const view_1 = require('../view');
const component_1 = require('../component');
const internal_1 = require('../internal');
const utils_1 = require('../utils');
const memo_1 = require('../memo');
const Memo = (0, memo_1.memo)(
(0, component_1.component)(({ getValue }) => getValue()),
(p, n) => (0, utils_1.detectAreDepsDifferent)(p.deps, n.deps),
);
function detectIsElement(value) {
return (0, component_1.detectIsComponent)(value) || (0, view_1.detectIsVirtualNodeFactory)(value);
}
function useMemo(getValue, deps) {
const cursor = (0, internal_1.__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 = (0, utils_1.detectAreDepsDifferent)(state.deps, deps) ? getValue() : state.value;
$value = value;
}
state.deps = deps;
state.value = value;
hook.idx++;
return $value;
}
exports.useMemo = useMemo;
//# sourceMappingURL=use-memo.js.map