/
githubmirror
/
ionic
Обзор
Документация
Войти
/
githubmirror
/
ionic
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
packages/react/src/components/navigation/IonNav.tsx
40 строк
1 KB
Sean Perkins
fix(react): nav will remove components from the DOM (#25763)
19 апр 2023, 20:03
Не верифицирован
19 апр 2023, 20:03
beb46bf
Код
Авторство
О чём код?
import type { FrameworkDelegate, JSX } from '@ionic/core/components'; import { defineCustomElement } from '@ionic/core/components/ion-nav.js'; import React, { useMemo, useState } from 'react'; import { ReactDelegate } from '../../framework-delegate'; import { createReactComponent } from '../react-component-lib'; import { createForwardRef } from '../utils'; const IonNavInner = createReactComponent<JSX.IonNav & { delegate: FrameworkDelegate }, HTMLIonNavElement>( 'ion-nav', undefined, undefined, defineCustomElement ); type IonNavProps = JSX.IonNav & { forwardedRef?: React.ForwardedRef<HTMLIonNavElement>; }; // eslint-disable-next-line @typescript-eslint/no-unused-vars const IonNavInternal: React.FC<IonNavProps> = ({ children, forwardedRef, ...restOfProps }) => { const [views, setViews] = useState<React.ReactElement[]>([]); /** * Allows us to create React components that are rendered within * the context of the IonNav component. */ const addView = (view: React.ReactElement) => setViews((existingViews) => [...existingViews, view]); const removeView = (view: React.ReactElement) => setViews((existingViews) => existingViews.filter((v) => v !== view)); const delegate = useMemo(() => ReactDelegate(addView, removeView), []); return ( <IonNavInner delegate={delegate} ref={forwardedRef} {...restOfProps}> {views} </IonNavInner> ); }; export const IonNav = createForwardRef<IonNavProps, HTMLIonNavElement>(IonNavInternal, 'IonNav');