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)

39 lines (38 loc) 1.11 kB
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