函数作为 React 子项无效。 - React 中的功能组件
Functions are not valid as a React child. - Functional Components in React
我目前正在尝试将 Patternfly React 集成到我的项目中。 This 是我用作参考的 link,它工作正常。但需要为 header 、 footer 、 topnav 和 sidenav 提供单独的组件。因此,在将代码划分为组件时,我遇到了问题
Invalid prop nav supplied to PageSidebar
, expected a 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功能组件,在我的layout组件中使用。
我的页眉组件
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" />;
.
这到底有什么问题?
查看 seed app 中的代码,<PageSidebar>
的 nav
属性 设置为某些 React 元素(某些 JSX),而不是 React组件(返回一些 JSX 的函数)。
我想您应该使用 nav={<Sidenav />}
而不是使用 nav={Sidenav}
,以使您的代码与示例匹配。
我目前正在尝试将 Patternfly React 集成到我的项目中。 This 是我用作参考的 link,它工作正常。但需要为 header 、 footer 、 topnav 和 sidenav 提供单独的组件。因此,在将代码划分为组件时,我遇到了问题
Invalid prop nav supplied to
PageSidebar
, expected a 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功能组件,在我的layout组件中使用。
我的页眉组件
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" />;
.
这到底有什么问题?
查看 seed app 中的代码,<PageSidebar>
的 nav
属性 设置为某些 React 元素(某些 JSX),而不是 React组件(返回一些 JSX 的函数)。
我想您应该使用 nav={<Sidenav />}
而不是使用 nav={Sidenav}
,以使您的代码与示例匹配。