reactjs - Material-UI 抽屉组件的单独触发器

标签 reactjs material-design material-ui

如果我有一个 material-ui Drawer 组件,我如何使用与抽屉本身分开的元素来切换该状态?在所有示例中,他们都使用这样的东西:

export class DrawerSimpleExample extends React.Component {

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

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

    render() {
        return (
            <MuiThemeProvider muiTheme={customTheme}>

            <div>
                <RaisedButton
                    label="Toggle Drawer"
                    onClick={this.handleToggle}
                />
                <Drawer open={this.state.open}
                        docked={true}
                >
                    <MenuItem>Menu Item</MenuItem>
                    <MenuItem>Menu Item 2</MenuItem>
                </Drawer>
            </div>
            </MuiThemeProvider>
        );
    }
}

但是如果我想让 RaisedButton 放在 AppBar 中怎么办?像这样:

export class AppBarExampleIconButton extends React.Component {

    constructor(props) {
        super(props);
    }

    render() {
        return (
            <MuiThemeProvider muiTheme={customTheme}>

            <AppBar
                    title={<span style={styles.title}>Title</span>}
                    onTitleClick={handleClick}
                    iconElementLeft={<div>
                        <IconButton><NavigationMenu /></IconButton>
                        // Have this button toggle the drawer instead
                        <RaisedButton
                            label="Toggle Drawer"
                            onClick={this.handleToggle}
                        />
                    </div>}
                    iconElementRight={<FlatButton label="Save" />}
                />
            </MuiThemeProvider>
        );
    }
}

此外,如果我想让 Drawer 永久打开,但仍然可以从 AppBar 切换(到我将调整它们的位置/宽度的位置)打开/关闭)。

最佳答案

使用 Prop 而不是状态切换抽屉。

export class AppBarExampleIconButton extends React.Component {

constructor(props) {
    super(props);
    this.state = {
    openDrawer: false,
    }
}
handleToggle=()=>{this.setState({openDrawer: !this.state.openDrawer});

render() {
    return (
        <MuiThemeProvider muiTheme={customTheme}>

        <AppBar
                title={<span style={styles.title}>Title</span>}
                onTitleClick={handleClick}
                iconElementLeft={<div>
                    <IconButton><NavigationMenu /></IconButton>
                    // Have this button toggle the drawer instead
                    <RaisedButton
                        label="Toggle Drawer"
                        onClick={this.handleToggle}
                    />
                </div>}
                iconElementRight={<FlatButton label="Save" />}
            />
          <DrawerSimpleExample open = {this.state.openDrawer}/>
        </MuiThemeProvider>
    );
}

在你的 DrawerSimple 组件中:

export class DrawerSimpleExample extends React.Component { 
    render() {
        return (
            <MuiThemeProvider muiTheme={customTheme}>
            <div>
                <Drawer open={this.props.open}
                        docked={true}>
                    <MenuItem>Menu Item</MenuItem>
                    <MenuItem>Menu Item 2</MenuItem>
                </Drawer>
            </div>
            </MuiThemeProvider>
        );
    }
}

关于reactjs - Material-UI 抽屉组件的单独触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49664808/

相关文章:

android - BottomSheetDialogFragment 的圆角

android - 折叠工具栏无法通过 fling 打开

javascript - Meteor/React - Material UI 组件芯片无法识别 onRequestDelete 函数

javascript - 如何在docker文件中获取对我可用的docker环境变量? (使用React/JS/webpack)

.net - 在单独的 .JSX 文件中引用组件

android - 如何在 Android 中使用 XML 中的 Material Design 图标?

css - 如何将css框架的默认属性更改为material ui

javascript - 下拉菜单中的 Material UI 自动完成结果文本

javascript - .tsx 组件中的 .js 组件 - 没有重载匹配此调用/属性在 IntrinsicAttributes 类型上不存在

javascript - 在 React js 中从对象创建一个选择选项