reactjs - 从 AppBar LeftIcon 切换抽屉

标签 reactjs material-ui

你好 Stackoverflowers,

我正在使用 ReactJS 开始我的第一个 Material-UI 项目。

它的应用程序栏和抽屉正在工作(抽屉只能从左边框滑动到右侧)。

现在我想要 AppBar onLeftIconButtonTouchTap 来切换抽屉。

这是我当前的 AppBar.jsx 文件代码:

import React from 'react';
import AppBar from 'material-ui/AppBar';

import DrawerLeft from './DrawerLeft.jsx';

function handleTouchTap() {
    // Tried it her 
}

const AppBarTop = () => (
   <div>
        <AppBar
            title="Title"
            onLeftIconButtonTouchTap={handleTouchTap}
        />
        <DrawerLeft />
   </div>
);

export default AppBarTop;

DrawerLeft.jsx 如下:

import React from 'react';
import Drawer from 'material-ui/Drawer';
import MenuItem from 'material-ui/MenuItem';
import RaisedButton from 'material-ui/RaisedButton';

export default class DrawerLeft extends React.Component {

constructor(props) {
    super(props);
    this.state = {open: false};
}

handleToggle() {
    this.setState({open: !this.state.open});
}

handleClose() {
    this.setState({open: false});
}

render() {
    return (
        <div>
            <RaisedButton
                label="Open Drawer"
                onTouchTap={this.handleToggle.bind(this)}
            />
            <Drawer
                docked={false}
                width={200}
                open={this.state.open}
                onRequestChange={(open) => this.setState({open})}
            >
                <MenuItem onTouchTap={this.handleClose.bind(this)}>Menu Item</MenuItem>
                <MenuItem onTouchTap={this.handleClose.bind(this)}>Menu Item 2</MenuItem>
            </Drawer>
        </div>
    );
}
}

那么如何从 AppList 的 LeftIcon 中切换抽屉呢?

预先感谢您对我的帮助。

西奥

最佳答案

只需两步即可轻松实现:

1 - 您必须在 AppBar 组件中保持抽屉的 open 状态,并且您可能知道 - 您将无法使用无状态/功能组件。
新 AppBarTop 组件的示例:

import React from 'react';
import AppBar from 'material-ui/AppBar';
import DrawerLeft from './DrawerLeft.jsx';

export default class AppBarTop extends React.Component {

    constructor() {
        this.state = {
            open: false
        }
    }  
    //Toggle function (open/close Drawer)
    toggleDrawer() {
        this.setState({
            open: !this.state.open
        })
    }

    render() {
        return (
            <div>
                <AppBar
                    title="Title"
                    onLeftIconButtonTouchTap={this.toggleDrawer.bind(this)} 
                />
                <DrawerLeft open={this.state.open} onToggleDrawer={this.toggleDrawer.bind(this)} />
           </div>
        )
    }
}

2 - 现在在 DrawerLeft 组件中,您将使用 this.props.open,而不是使用 this.state.open。如果您想切换打开状态,只需调用 this.props.onToggleDrawer - 因为我们是从父级传递它。

您可以从 DrawerLeft 中删除 handleTogglehandleClose。 由于您的 DrawerLeft 组件没有内部状态 - 您可以将他变成一个功能/无状态组件。

关于reactjs - 从 AppBar LeftIcon 切换抽屉,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37286351/

相关文章:

reactjs - MUI 芯片作为可以选择的标签(类似复选框的行为)

javascript - 使用 CSS 悬停在父 JSX 上更改子 div 的样式

javascript - 如何根据条件显示/隐藏 MUI 选项卡并维护正确的选项卡索引

reactjs - 访问被阻止 : Project has not completed the google verification process

reactjs - typescript 和 Gatsby : Development bundle cannot resolve paths but VS Code can

javascript - 在具有Redux Thunk的React Redux应用程序中保持异步调用的DRY

reactjs - 如何自定义样式 Material UI v5

javascript - 单击另一个输入后如何防止我的日期选择器重新聚焦

javascript - 世博会,React Native 异步存储在热重载后重置?

javascript - redux 可以被视为 pub/sub 或观察者模式吗?