如何在 React Component class 中集成常量和函数?
How to integrate constants and functions in React Component class?
让我们从Material-UI中获取AppBar代码:
https://material-ui.com/components/app-bar/#app-bar-with-a-primary-search-field
有一个"renderMobileMenu"。我想整合它。问题是示例代码使用 "function" 而我的是 React 组件 class。我需要有关如何在 React 组件 class 中集成该 renderMobileMenu(和相关)代码段的指导。
我也在用 React Redux。
export default connect(
mapStateToProps,
{wbToggle: wbToggle, vidToggle: vidToggle, fileToggle: fileToggle}
)(Utilitybar);
我试过了,但总是报错,说我违反了 hooks 法则。
您可以查看 v3 文档以了解它是如何以老式方式使用的。
我假设您的 class 名称是“Utilitybar”。由于您需要使用示例中的一段代码和功能,您可以通过两种方式实现它,
只需复制您需要的函数并将其粘贴到 class 之外,并使用所需的依赖函数和包调用它 -(不推荐的方法和肮脏的方式)
创建一个无状态组件(根据您的需要state-full / stateless),在现有的 class 中添加您需要的功能,在新创建的无状态组件导入中所需的功能和包。一旦完成,您的无状态组件就可以使用了,然后继续导入您的 Utilitybar 并使用它。
参考下面的例子,
您需要创建一个单独的无状态组件
<path>/MobileMenu.js
/*import the dependency packages, files you are referring in your sample function*/
import React from 'react';
import { fade, makeStyles } from '@material-ui/core/styles';
import AppBar from '@material-ui/core/AppBar';
import Toolbar from '@material-ui/core/Toolbar';
...
...
....
export const RenderMobileMenu = ({
}) => {
/*copied the dependent functions to render - renderMobileMenu*/
const [mobileMoreAnchorEl, setMobileMoreAnchorEl] = React.useState(null);
const [anchorEl, setAnchorEl] = React.useState(null);
const isMenuOpen = Boolean(anchorEl);
const isMobileMenuOpen = Boolean(mobileMoreAnchorEl);
const mobileMenuId = 'primary-search-account-menu-mobile';
function handleMobileMenuClose() {
setMobileMoreAnchorEl(null);
}
function handleMenuClose() {
setAnchorEl(null);
handleMobileMenuClose();
}
/*copied the code under renderMobileMenu*/
return (
<Menu
anchorEl={mobileMoreAnchorEl}
anchorOrigin={{ vertical: 'top', horizontal: 'right' }}
id={mobileMenuId}
keepMounted
transformOrigin={{ vertical: 'top', horizontal: 'right' }}
open={isMobileMenuOpen}
onClose={handleMobileMenuClose}
>
<MenuItem>
<IconButton aria-label="Show 4 new mails" color="inherit">
<Badge badgeContent={4} color="secondary">
<MailIcon />
</Badge>
</IconButton>
<p>Messages</p>
</MenuItem>
<MenuItem>
<IconButton aria-label="Show 11 new notifications" color="inherit">
<Badge badgeContent={11} color="secondary">
<NotificationsIcon />
</Badge>
</IconButton>
<p>Notifications</p>
</MenuItem>
<MenuItem onClick={handleProfileMenuOpen}>
<IconButton
aria-label="Account of current user"
aria-controls="primary-search-account-menu"
aria-haspopup="true"
color="inherit"
>
<AccountCircle />
</IconButton>
<p>Profile</p>
</MenuItem>
</Menu>
)
}
现在 RenderMobileMenu 已准备好为 Utilitybar.js 服务。
只需继续将此 RenderMobileMenu.js 文件导入您的 Utilitybar.js 并在 render( return() ) 方法下使用它。
编码愉快!!
让我们从Material-UI中获取AppBar代码: https://material-ui.com/components/app-bar/#app-bar-with-a-primary-search-field
有一个"renderMobileMenu"。我想整合它。问题是示例代码使用 "function" 而我的是 React 组件 class。我需要有关如何在 React 组件 class 中集成该 renderMobileMenu(和相关)代码段的指导。 我也在用 React Redux。
export default connect(
mapStateToProps,
{wbToggle: wbToggle, vidToggle: vidToggle, fileToggle: fileToggle}
)(Utilitybar);
我试过了,但总是报错,说我违反了 hooks 法则。
您可以查看 v3 文档以了解它是如何以老式方式使用的。
我假设您的 class 名称是“Utilitybar”。由于您需要使用示例中的一段代码和功能,您可以通过两种方式实现它,
只需复制您需要的函数并将其粘贴到 class 之外,并使用所需的依赖函数和包调用它 -(不推荐的方法和肮脏的方式)
创建一个无状态组件(根据您的需要state-full / stateless),在现有的 class 中添加您需要的功能,在新创建的无状态组件导入中所需的功能和包。一旦完成,您的无状态组件就可以使用了,然后继续导入您的 Utilitybar 并使用它。
参考下面的例子,
您需要创建一个单独的无状态组件
<path>/MobileMenu.js
/*import the dependency packages, files you are referring in your sample function*/
import React from 'react';
import { fade, makeStyles } from '@material-ui/core/styles';
import AppBar from '@material-ui/core/AppBar';
import Toolbar from '@material-ui/core/Toolbar';
...
...
....
export const RenderMobileMenu = ({
}) => {
/*copied the dependent functions to render - renderMobileMenu*/
const [mobileMoreAnchorEl, setMobileMoreAnchorEl] = React.useState(null);
const [anchorEl, setAnchorEl] = React.useState(null);
const isMenuOpen = Boolean(anchorEl);
const isMobileMenuOpen = Boolean(mobileMoreAnchorEl);
const mobileMenuId = 'primary-search-account-menu-mobile';
function handleMobileMenuClose() {
setMobileMoreAnchorEl(null);
}
function handleMenuClose() {
setAnchorEl(null);
handleMobileMenuClose();
}
/*copied the code under renderMobileMenu*/
return (
<Menu
anchorEl={mobileMoreAnchorEl}
anchorOrigin={{ vertical: 'top', horizontal: 'right' }}
id={mobileMenuId}
keepMounted
transformOrigin={{ vertical: 'top', horizontal: 'right' }}
open={isMobileMenuOpen}
onClose={handleMobileMenuClose}
>
<MenuItem>
<IconButton aria-label="Show 4 new mails" color="inherit">
<Badge badgeContent={4} color="secondary">
<MailIcon />
</Badge>
</IconButton>
<p>Messages</p>
</MenuItem>
<MenuItem>
<IconButton aria-label="Show 11 new notifications" color="inherit">
<Badge badgeContent={11} color="secondary">
<NotificationsIcon />
</Badge>
</IconButton>
<p>Notifications</p>
</MenuItem>
<MenuItem onClick={handleProfileMenuOpen}>
<IconButton
aria-label="Account of current user"
aria-controls="primary-search-account-menu"
aria-haspopup="true"
color="inherit"
>
<AccountCircle />
</IconButton>
<p>Profile</p>
</MenuItem>
</Menu>
)
}
现在 RenderMobileMenu 已准备好为 Utilitybar.js 服务。
只需继续将此 RenderMobileMenu.js 文件导入您的 Utilitybar.js 并在 render( return() ) 方法下使用它。
编码愉快!!