首页 > 解决方案 > 函数作为 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;

问题是将我的函数组件传递给 nav 属性中的 Patternfly 的 PageSidebar 组件时为 const Sidebar = <PageSidebar nav={SideNav} theme="dark" />;.

这到底有什么问题?

标签: javascriptreactjsreact-reduxpatternfly

解决方案


查看种子应用程序中的代码,的nav属性<PageSidebar>设置为一些 React 元素(一些 JSX),而不是一个 React 组件(一个返回一些 JSX 的函数)。

我想nav={Sidenav}您应该使用nav={<Sidenav />}, 而不是使用 , 使您的代码与示例匹配。


推荐阅读