Функции недействительны в качестве дочернего элемента React. - Функциональные компоненты в React

В настоящее время я пытаюсь интегрировать Patternfly React в свой проект. Это ссылка, которую я использую для справки, и она работает нормально. Но нужно иметь отдельный компонент для header, footer, topnav и sidenav. Итак, разбивая код на компоненты, я получаю проблему, поскольку

Недопустимая навигация реквизита указана для PageSidebar, ожидается ReactNode.

Вот мой код Sidenav

import ReactDOM from 'react-dom';
import "@patternfly/react-core/dist/styles/base.css";
import '../../app/fonts.css';

import React from 'react';
import {  
  Nav,
  NavExpandable,
  NavItem,
  NavList  
} from '@patternfly/react-core'; 

function SideNav() {

    this.state = { 
      activeGroup: 'grp-1',
      activeItem: 'grp-1_itm-1'
    }; 

    this.onNavSelect = result => {
      this.setState({
        activeItem: result.itemId,
        activeGroup: result.groupId
      });
    }; 

    const { activeItem, activeGroup } = this.state;

    const PageNav = (
      <Nav onSelect={this.onNavSelect} aria-label="Nav" theme="dark">
        <NavList>
          <NavExpandable title="System Panel" groupId="grp-1" isActive={activeGroup === 'grp-1'} isExpanded>
            <NavItem groupId="grp-1" itemId="grp-1_itm-1" isActive={activeItem === 'grp-1_itm-1'}>
              Overview
            </NavItem>
            <NavItem groupId="grp-1" itemId="grp-1_itm-2" isActive={activeItem === 'grp-1_itm-2'}>
              Resource usage
            </NavItem>
            <NavItem groupId="grp-1" itemId="grp-1_itm-3" isActive={activeItem === 'grp-1_itm-3'}>
              Hypervisors
            </NavItem>

          </NavExpandable>
        </NavList>
      </Nav>
    );


        return (PageNav);


}

export default SideNav;

Выше приведен мой компонент функции sideNav и его использование в моем компоненте макета.

Компонент "Мой заголовок"

import "@patternfly/react-core/dist/styles/base.css";
import '../../app/fonts.css';

import React from 'react';
import {  
  Page,
  PageHeader,
  PageSection,
  PageSectionVariants,
  PageSidebar, 
  TextContent,
  Text, 
} from '@patternfly/react-core';

import SideNav from '../sideNav/sideNav'; 

class Layout extends React.Component {

  render() {

    const Header = (
      <PageHeader 
        toolbar={PageToolbar} 
        showNavToggle
      />
    );
    const Sidebar = <PageSidebar nav={SideNav} theme="dark" />;


    return (
      <React.Fragment>
        <Page
          header={Header}
          sidebar={Sidebar} 
          mainContainerId={pageId}
        >
          <PageSection variant={PageSectionVariants.light}>
            <TextContent>
              <Text component="h1">Main title</Text>
              <Text component="p">
                Body  
              </Text>
            </TextContent>
          </PageSection>

        </Page>
      </React.Fragment>
    );
  }
}

export default Layout;

Проблема заключается в передаче моего функционального компонента компоненту Patternfly PageSidebar в атрибуте nav как const Sidebar = <PageSidebar nav={SideNav} theme="dark" />; .

Что именно не так с этим?


person Tom    schedule 13.04.2020    source источник


Ответы (1)


Глядя на код в исходном приложении свойство nav для <PageSidebar> установлено для некоторых элементов React (некоторые JSX), а не для компонента React (функция, возвращающая какой-то JSX).

Я предполагаю, что вместо использования nav={Sidenav} вам следует использовать nav={<Sidenav />}, чтобы ваш код соответствовал примеру.

person Tom Fenech    schedule 13.04.2020