javascript - 使用 Material-UI 在 React.js 中打开和关闭抽屉
问题描述
我正在为我的 UI 库使用 React Material Web 组件( https://jamesmfriedman.github.io/rmwc/ )。
我试图为我的界面实现抽屉。
抽屉,js
export default class DrawerBar extends Component {
render() {
return (
<Drawer
temporary
open={this.props.opened}
>
<DrawerHeader>
<headline6>Headline 6</headline6>
</DrawerHeader>
<DrawerContent>
<SimpleListItem graphic="favorite" text="Body 2"/>
<SimpleListItem graphic="favorite" text="Body 2"/>
<SimpleListItem graphic="favorite" text="Body 2"/>
<SimpleListItem graphic="favorite" text="Body 2"/>
<SimpleListItem graphic="favorite" text="Body 2"/>
<SimpleListItem graphic="favorite" text="Body 2"/>
<SimpleListItem graphic="favorite" text="Body 2"/>
<SimpleListItem graphic="favorite" text="Body 2"/>
</DrawerContent>
</Drawer>
)
}
}
具有打开抽屉图标的导航栏
export default class Navbar extends Component {
render() {
return (
<Toolbar>
<ToolbarRow>
<ToolbarSection alignStart>
<ToolbarMenuIcon use="menu" onClick={this.props.toggle}/>
<ToolbarTitle>Syngenta Digital Innovation Lab Web UI Boilerplate</ToolbarTitle>
</ToolbarSection>
<ToolbarSection alignEnd>
<ToolbarIcon use="share" onClick={this.props.login}/>
<ToolbarIcon use="favorite" onClick={this.props.login}/>
<ToolbarIcon use="search" onClick={this.props.login}/>
</ToolbarSection>
</ToolbarRow>
</Toolbar>
)
}
}
和使用它的 App.js
class App extends Component {
state = { drawer: false, login: false }
drawerToggle = () => { this.setState( { ...this.state, drawer: !this.state.drawer } ) }
loginToggle = () => { this.setState( { ...this.state, login: !this.state.login } ) }
render() {
return (
<div className="app">
<Login opened={this.state.login} toggle={this.loginToggle}/>
<DrawerBar opened={this.state.drawer}/>
<div className="body">
<Navbar toggle={this.drawerToggle} login={this.loginToggle}/>
<Feed/>
</div>
</div>
);
}
}
export default App;
每当我单击打开它的按钮时,它都可以正常工作,但是当我单击背景时它不会关闭。
我假设这是因为open
参数 forDrawer
是道具,而不是状态。
但我不确定如何调整这个问题。
解决方案
这与您是否传递状态或道具无关。您基本上在这里缺少一些道具参数和状态更改。
首先, Drawer 需要调用第二个道具onClose
,你应该在toggle
这里传递你的函数。参考在这里https://material-ui.com/api/drawer/
此外,请确保您将onClick
侦听器和onKeydown
侦听器传递给您的抽屉内容,并提供您的切换事件,以便在您的抽屉上单击时抽屉关闭(除非这不是所需的效果)