reactjs - Tilføjelse af element til antd Dropdown overlay-egenskab resulterer i React-fejl om enkelt barn
Nedstrippet kode:
const menu = (
<Menu>
<Menu.Item>
1st menu item
</Menu.Item>
</Menu>
);
export const QBDropdown: React.FC = () =>
<div>
<Dropdown overlay={menu} />
</div>
Når man forsøger at udfylde overlay-ejendommen i antd-dropdown, opstår følgende fejl altid:
Fejl: React.Children.only forventede at modtage et enkelt React-element som barn.
Det gør det tilsyneladende uanset, hvad jeg fylder det med. En enkelt <div></div> eller <></> giver den samme fejl. Hvad foregår der her?
Svar #1
Dropdown-menuen skal have et barn, hvilket kan verificeres ved hjælp af React.Children.only
<div>
<Dropdown overlay={menu}>
<button>Something to trigger the menu</button>
</Dropdown>
</div>
https://reactjs.org/docs/react-api.html#reactchildrenonly
https://github.com/ant-design/ant-design/blob/bf72f5538a9a788639bd4b56a1ccc9f86ea453c3/components/dropdown/dropdown.tsx#L144
Svar #2
Prøv at bruge en Dropdown som denne i antd v5
const profileItems = [
{
key: "1",
label: (
<a target="_blank" rel="noopener noreferrer">
1st menu item
</a>
),
},
{
key: "2",
label: (
<a target="_blank" rel="noopener noreferrer">
2nd menu item (disabled)
</a>
),
icon: <LoginOutlined />,
disabled: true,
},
{
key: "3",
label: (
<a target="_blank" rel="noopener noreferrer">
3rd menu item (disabled)
</a>
),
disabled: true,
},
{
key: "4",
danger: true,
label: "a danger item",
}]
<Dropdown menu={{ items: profileItems }}>
<div className="logo">
<LoginOutlined />
<div>Profile</div>
</div>
</Dropdown>
