ayanami
Version:
A better way to react with state
20 lines (19 loc) • 991 B
JavaScript
import * as React from 'react';
import get from 'lodash/get';
import { getInstanceWithScope, TransientScope, createScopeWithRequest, } from '../core';
import { DEFAULT_SCOPE_NAME } from '../ssr/constants';
import { isSSREnabled } from '../ssr/flag';
import { SSRContext } from '../ssr/ssr-context';
import { useAyanamiInstance, } from './use-ayanami-instance';
export function useAyanami(A, config) {
const scope = get(config, 'scope');
const selector = get(config, 'selector');
const req = isSSREnabled() ? React.useContext(SSRContext) : null;
const reqScope = req ? createScopeWithRequest(req, scope) : scope;
const ayanami = React.useMemo(() => getInstanceWithScope(A, reqScope), [reqScope]);
ayanami.scopeName = scope || DEFAULT_SCOPE_NAME;
const useAyanamiInstanceConfig = React.useMemo(() => {
return { destroyWhenUnmount: scope === TransientScope, selector };
}, [reqScope]);
return useAyanamiInstance(ayanami, useAyanamiInstanceConfig);
}