Jag kan tänka mig ett par olika lösningar, vad som passar beror lite på tycke och smak, hur flexibel du är med hur du strukturerar dina komponenter och hur resten av din app ser ut.
En variant är att du använder React.cloneElement när du renderar children inuti MenuListComposition, och skicka in handleClose som en prop:
Kod:
import { Children, cloneElement } from 'react'
export const MenuListComposition = ({ title, children }) => {
const handleClose = () => { ... }
return Children.map(children, (child, index) =>
cloneElement(child, {
handleClose,
})
)
}
Ett annat alternativ är att bygga om din MenuListComposition så att den renderar sina children via en funktion du tar in som en prop:
Kod:
export const MenuListComposition = ({ title, items, renderItem }) => {
const handleClose = () => { ... }
return (
<>
{items.map(() => renderItem(item, handleClose))}
</>
)
}
<MenuListComposition
title="Game"
items={['Create', 'Show all']},
renderItem={(item, handleClose) => <MenuListItem onClick={handleClose}>{item}</MenuListItem>}
/>