Реагирующие компоненты (объекты недопустимы в качестве дочернего элемента React)

#reactjs

Вопрос:

Я пытаюсь создать компонент Sidenav, как это:

 <Sidenav>
                        <SidenavSection title={'Develop'}>
                            <SidenavItem>Authentication</SidenavItem>
                            <SidenavItem>Test</SidenavItem>
                        </SidenavSection>
                    </Sidenav>
 

Поэтому я создал SidenavSection — группу предметов, и SidenavItem .

Раздел Sidenav выглядит так:

 function SidenavSection({ children, title }) {
    return (
        <>
            <li className="p-4 w-full flex relative shadow-sm">
                <div className="flex-auto my-1">
                    <span className="text-white font-medium">{title}</span>
                </div>
            </li>

            {children.map((child) => {
                    console.log('child', child);
                    return (
                        <div
                            className="text-blue-400 flex relative px-4 hover:bg-gray-700 cursor-pointer">
                            <div className="mr-4 my-auto">
                                <svg className="fill-current h-5 w-5" focusable="false" viewBox="0 0 24 24"
                                     aria-hidden="true">
                                    <path
                                        d="M16 11c1.66 0 2.99-1.34 2.99-3S17.66 5 16 5c-1.66 0-3 1.34-3 3s1.34 3 3 3zm-8 0c1.66 0 2.99-1.34 2.99-3S9.66 5 8 5C6.34 5 5 6.34 5 8s1.34 3 3 3zm0 2c-2.33 0-7 1.17-7 3.5V19h14v-2.5c0-2.33-4.67-3.5-7-3.5zm8 0c-.29 0-.62.02-.97.05 1.16.84 1.97 1.97 1.97 3.45V19h6v-2.5c0-2.33-4.67-3.5-7-3.5z"/>
                                </svg>
                            </div>
                            <div className="flex-auto my-1">
                                <span>Test</span>
                            </div>
                        </div>)
                }
            )}
        </>)
}
 

СиденавИтем:

 function SidenavItem({ children }) {
    return (
        {children}
    )
}
 

Когда я обновляю свой SidenavSection от test до:

 <div className="flex-auto my-1">
                                <span>{child}</span>
                            </div>
 

Я получаю следующую ошибку:

 Error: Objects are not valid as a React child (found: object with keys {children}). If you meant to render a collection of children, use an array instead.
 

Не уверен, что я сделал неправильно — моя цель-сделать ребенка (SidenavItem). Есть идеи?

Ответ №1:

Вам нужно вернуть элементы JSX SidenavItem вместо объекта с ключом children , как вы делаете в настоящее время. Если вы используете v16 или выше react, вы можете просто написать это так

 function SidenavItem({ children }) {
    return children;
}