【问题标题】:Functions are not valid as a React child. - Functional Components in React函数作为 React 子级无效。 - React 中的功能组件
【发布时间】:2020-04-13 07:43:47
【问题描述】:

我目前正在尝试将 Patternfly React 集成到我的项目中。 This 是我用作参考的链接,它工作正常。但是需要为 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 = &lt;PageSidebar nav={SideNav} theme="dark" /&gt;;.

这到底有什么问题?

【问题讨论】:

    标签: javascript reactjs react-redux patternfly


    【解决方案1】:

    查看seed app 中的代码,&lt;PageSidebar&gt;nav 属性设置为一些 React 元素(一些 JSX),而不是一个 React 组件(一个返回一些 JSX 的函数)。

    我猜你应该使用nav={&lt;Sidenav /&gt;},而不是使用nav={Sidenav},以使你的代码与示例匹配。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-15
      • 2021-11-09
      • 1970-01-01
      • 2020-08-04
      • 1970-01-01
      • 2018-11-05
      • 2019-02-11
      • 2020-07-01
      相关资源
      最近更新 更多