Я пытаюсь получить раскрывающийся список Antd на основе массива, но он продолжает давать сбой с ошибкой: React.Children.only ожидает получения одного дочернего элемента React.
Я видел другие темы об этом, но я сбит с толку, потому что мое меню работает, если данные статичны: вот фрагмент
var items = [
{
key: '0',
label: 'item0',
},
{
key: '1',
label: 'item1',
}
];
var items2 = []
for (let item of items) items2.push({key: items2.length.toString(), label: item.label})
console.info(items, items2, JSON.stringify(items), JSON.stringify(items2), JSON.stringify(items) === JSON.stringify(items2) )
return (<>
<Dropdown menu = {{ items }} trigger = {['click']}>
<a onClick = {(e) => e.preventDefault()}>
{name} <DownOutlined />
</a>
</Dropdown>
<Dropdown menu = {{ items2 }} trigger = {['click']}>
<a onClick = {(e) => e.preventDefault()}>
{name} <DownOutlined />
</a>
</Dropdown>
</>)
Как и ожидалось, items и items2 одинаковы по конструкции, а JSON.stringify(items) === JSON.stringify(items2) )
равно true
Тем не менее, щелчок по первому раскрывающемуся списку с элементами работает, а щелчок по второму выбрасывает.
Как я могу решить эту проблему?
заменить menu = {{ items2 }}
на menu = {{ items: items2 }}
атрибут меню должен иметь свойство items
Я надеюсь, что это поможет
Вы должны написать это так
<Dropdown menu = {{ items: items2 }} trigger = {["click"]}>
первый работает только по стечению обстоятельств! потому что имя variable
- это предметы, и поскольку вы должны указать имя property
, которое также является предметами, оно работает, поэтому
{{items}}
на самом деле:
{{items:items}}
для второго вы должны упомянуть property
предметы, потому что у вас есть другое имя variable
{{items:items2}}