UNPKG

@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
'use strict'; 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