Как сделать вложенные компоненты используя связку React и Typescript
Есть желание сделать вложенные компоненты используя стек React и Typescript
Под вложенными компонентами я подразумеваю возможность использования компонента как по основному default пути, так и через точечную нотацию
Например:
<Menu><Menu.Item>первый пункт меню</Menu.Item></Menu>
Если есть возможность, приведите пример реализации подобного компонента
Заранее спасибо за ваши ответы
Ответ:
const Menu: React.FC & {Item: typeof Item} = ({
children,
}) => (
<div>
{children}
</div>
);
Menu.Item = ({
children
}) => (
<span>
{children}
</span>
);
const App = () => (
<Menu>
<Menu.Item>Item 1</Menu.Item>
<Menu.Item>Item 2</Menu.Item>
<Menu.Item>Item 3</Menu.Item>
</Menu>
);
Ответы (2 шт):
Автор решения: Трипольский Пётр
→ Ссылка
const Menu = ({
children,
}) => (
<div>
{children}
</div>
);
Menu.Item = ({
children
}) => (
<span>
{children}
</span>
);
const App = () => (
<Menu>
<Menu.Item>Item 1</Menu.Item>
<Menu.Item>Item 2</Menu.Item>
<Menu.Item>Item 3</Menu.Item>
</Menu>
);
Для тайпскрипта только добавить типы:
const Menu = ({ children }: PropsWithChildren<{}>) => (
<div>
{children}
</div>
);
Menu.Item = ({ children }: PropsWithChildren<{}>) => (
<span>
{children}
</span>
);
const App = () => (
<Menu>
<Menu.Item>Item 1</Menu.Item>
<Menu.Item>Item 2</Menu.Item>
<Menu.Item>Item 3</Menu.Item>
</Menu>
);
Автор решения: Qwertiy
→ Ссылка
function Outer({ children }: PropsWithChildren<{}>) {
return <div>{children}</div>
}
namespace Outer {
export function Inner() {
return <span>inner</span>
}
}
function Smth() {
return (
<Outer>
<Outer.Inner />
</Outer>
)
}