【发布时间】:2018-11-16 07:15:24
【问题描述】:
请求:请帮我弄清楚当变体道具是“临时”时如何让抽屉组件打开。
Material-UI 包:@material-ui/core
我在自己的自定义导航组件中实现了 Material UI 的抽屉组件。当我将变体道具保留为默认的“临时”时,我无法让抽屉出现。我可以清楚地看到(在我的 Chrome React 插件中)“open”道具确实被切换为“true”,但抽屉仍然没有出现。当我将变体更改为“持久”时,抽屉确实会出现,但我更喜欢使用变体“临时”,因为它的默认行为是在用户单击屏幕上的任意位置时关闭。
这是我的代码:
import React, {Component} from 'react'
import AppBar from '@material-ui/core/AppBar';
import {Toolbar, Button} from "@material-ui/core"
import MenuIcon from '@material-ui/icons/Menu'
import IconButton from "@material-ui/core/es/IconButton/IconButton";
import Typography from "@material-ui/core/es/Typography/Typography";
import MenuItem from "@material-ui/core/es/MenuItem/MenuItem";
import Drawer from "@material-ui/core/es/Drawer/Drawer";
import ListItemText from "@material-ui/core/es/ListItemText/ListItemText";
class Nav extends Component {
constructor() {
super()
this.state = {drawer: false}
this.toggleDrawer = this.toggleDrawer.bind(this)
}
toggleDrawer(open) {
debugger
this.setState({
drawer: open
})
}
render() {
const drawerMenu = (
<div>
<MenuItem><ListItemText primary="Home"></ListItemText></MenuItem>
<MenuItem><ListItemText primary="Stock Points"></ListItemText></MenuItem>
<MenuItem><ListItemText primary="Product Manager"></ListItemText></MenuItem>
</div>
)
return (
<div>
<AppBar position="static">
<Toolbar>
<IconButton onClick={() => this.toggleDrawer(true)} color="inherit" aria-label="Menu">
<MenuIcon />
</IconButton>
<Typography variant="title" color="inherit">
{this.props.title}
</Typography>
<Button color="inherit">New Product</Button>
</Toolbar>
</AppBar>
<Drawer open={this.state.drawer} onClose={() => this.toggleDrawer(false)} variant="temporary" keepMounted={true}>
<div tabIndex={0} role="button" onClick={() => this.toggleDrawer(false)} onKeyDown={() => this.toggleDrawer(false)}>
{drawerMenu}
</div>
</Drawer>
</div>
)
}
}
export default Nav
【问题讨论】:
-
我在 codeSandbox 中测试了您的代码......它似乎工作正常。
Drawer默认隐藏,单击菜单按钮时打开/关闭。这是code sandbox demo -
感谢您确认这不是语法错误。我确实验证了它在您的 codeSandbox 中是否有效。一定是我的环境。我可能应该验证 material-ui v1+ 的先决条件
-
你解决了吗?
-
我最终恢复到 material-ui 的 v0。我的大部分项目都是在 v0 中完成的。我只是对 v1 抱有雄心壮志,但最终遇到了太多让我慢下来的障碍。再次感谢卢克。
标签: javascript reactjs babeljs material-ui jsx