/
githubmirror
/
ionic
Обзор
Документация
Войти
/
githubmirror
/
ionic
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
packages/react/src/framework-delegate.tsx
53 строки
1 KB
zhbhun
fix(react): Nav unmounts component while invoking popTo or popToRoot (#27821)
20 сен 2023, 20:31
Не верифицирован
20 сен 2023, 20:31
0edcb2c
Код
Авторство
О чём код?
import type { FrameworkDelegate } from '@ionic/core/components'; import { createPortal } from 'react-dom'; import { generateId } from './utils/generateId'; // TODO(FW-2959): types type ReactComponent = (props?: any) => JSX.Element; export const ReactDelegate = ( addView: (view: React.ReactElement) => void, removeView: (view: React.ReactElement) => void ): FrameworkDelegate => { const refMap = new WeakMap<HTMLElement, React.ReactElement>(); const reactDelegateId = `react-delegate-${generateId()}`; // Incrementing counter to generate unique keys for each view let id = 0; const attachViewToDom = async ( parentElement: HTMLElement, component: ReactComponent, propsOrDataObj?: any, cssClasses?: string[] ): Promise<any> => { const div = document.createElement('div'); cssClasses && div.classList.add(...cssClasses); parentElement.appendChild(div); const componentWithProps = component(propsOrDataObj); const key = `${reactDelegateId}-${id++}`; const hostComponent = createPortal(componentWithProps, div, key); refMap.set(div, hostComponent); addView(hostComponent); return Promise.resolve(div); }; const removeViewFromDom = (_container: any, component: HTMLElement): Promise<void> => { const hostComponent = refMap.get(component); hostComponent && removeView(hostComponent); component.remove(); return Promise.resolve(); }; return { attachViewToDom, removeViewFromDom, }; };