让我们从Material-UI中获取AppBar代码: https://material-ui.com/components/app-bar/#app-bar-with-a-primary-search-field
有一个“ renderMobileMenu”。我想整合它。问题在于示例代码使用“函数”,而我的是React Component类。我需要有关如何在React Component类中集成该renderMobileMenu(和相关)代码的指南。 我也在使用React Redux。
export default connect(
mapStateToProps,
{wbToggle: wbToggle, vidToggle: vidToggle, fileToggle: fileToggle}
)(Utilitybar);
我已经尝试过,但总是会出错,因为我违反了钩子定律。
答案 0 :(得分:3)
我假设您的班级名称是“ 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())方法下使用它。
编码愉快!
答案 1 :(得分:0)
您可以查看v3文档,以了解其如何以旧方式使用。