react Обощенный тип generic -- Пример для функционального компонента, коллбэк
Primary tabs
Пример:
import React from 'react';
export interface ConfigAccordionProps<T> {
name: string;
setPanelOpen: (panelName: T, isOpen: boolean) => void;
}
const createItemName = (name: string, index: number) => `${name}-${index}`;
export function ConfigAccordion<T>({ name, setPanelOpen }: ConfigAccordionProps<T>) {
const { t } = useTranslation();
// колбэк использует обобщенный тип
const handleChange = (name: T) => (_event: React.ChangeEvent<{}>, isExpanded: boolean) => {
setPanelOpen(name, isExpanded);
};
return (
<>
{configs.map(({ id, title, content }, index) => {
const itemName = createItemName(name, index);
const isExpanded = openedPanelsNames.includes(id);
return (
<AccordionItem
id={id}
name={itemName}
title={t(title)}
onChange={handleChange(id as unknown as T)}
expanded={isExpanded}
key={index}
>
{content}
</AccordionItem>
);
})}
</>
);
}
- Log in to post comments
- 1167 reads