【问题标题】:How to programmatically close the Material-Ui DropDownMenu如何以编程方式关闭 Material-Ui DropDownMenu
【发布时间】:2018-01-05 22:18:13
【问题描述】:

http://www.material-ui.com/#/components/dropdown-menu

由于样式问题,我不得不更改 Material-ui DropdownMenu 中组件的顺序。

但是现在某些按钮 (renderNavLink) 在单击后不会关闭下拉菜单。


我的渲染:

render() {
  return (
    <ToolbarGroup>
      <DropdownMenu value={defaultSelection} className="quick-dropdown">
        {this.renderMenuItems()}
      </DropdownMenu>
    </ToolbarGroup>
  );
}

renderMenuItems 方法

问题存在于 renderNavLink 函数中

renderMenuItems() {
  return menuItems.map((item, i) => {
    if (item.to) return renderNavLink(i, item, closeMenu);
    return renderClickable(i, item, this.props);
  });
}

renderNavLink 函数

我已经添加了 closeMenu 函数,但它所做的只是 console.log atm

const renderNavLink = (i, { to, primaryText: value }, closeMenu) => (
  <NavLink
    key={i}
    to={to}
    style={navLink.default}
    onClick={closeMenu}
  >
    <MenuItem key={i} value={value}>
      {value}
    </MenuItem>
  </NavLink>
);

关闭菜单

const closeMenu = () => {
  console.log('closeMenu...');
};

完整的组件代码

/* eslint-disable react/no-array-index-key */
import React from 'react';
import { NavLink } from 'react-router-dom';
import { connect } from 'react-redux';

// Material UI Components
import { ToolbarGroup } from 'material-ui/Toolbar';
import DropdownMenu from 'material-ui/DropDownMenu';
import MenuItem from 'material-ui/MenuItem';

// Actions
import { closeModal, setModal } from 'actions/Modals';

// Styles
import { navLink } from 'components/Styles/material';

// Copy
import { MODAL_CREATEDRAFT_NAME } from 'copy';

// Utils
import { cleanMapStateToProps } from 'utils';

const menuItems = [{
  primaryText: 'Quick Menu',
  className: 'quickmenu-navlink'
}, {
  primaryText: 'Create Draft',
  className: 'quickmenu-navlink',
  modal: MODAL_CREATEDRAFT_NAME
}, {
  primaryText: 'My Drafts',
  to: '/drafts/mine'
}, {
  primaryText: 'Active Drafts',
  to: '/drafts/active'
}, {
  primaryText: 'Archived Drafts',
  to: '/drafts/archived'
}, {
  primaryText: 'Environment Status',
  to: '/drafts/environments'
}];

const defaultSelection = menuItems[0].primaryText;

const renderNavLink = (i, { to, primaryText: value }, closeMenu) => (
  <NavLink
    key={i}
    to={to}
    style={navLink.default}
    onClick={closeMenu}
  >
    <MenuItem key={i} value={value}>
      {value}
    </MenuItem>
  </NavLink>
);

const renderClickable = (i, {
  modal, onClick, className, primaryText: value
}, {
  setModal: setModalAction
}) => (
  <MenuItem
    key={i}
    value={value}
    primaryText={value}
    style={navLink.special}
    className={className || ''}
    onClick={modal ? () => setModalAction(modal) : onClick}
  />
);

const closeMenu = () => {
  console.log('closeMenu...');
};

class QuickMenu extends React.Component {
  componentWillReceiveProps(nextProps) {
    const { currentDraft } = nextProps;

    if (currentDraft && currentDraft.id) {
      this.props.closeModal();
    }
  }

  renderMenuItems() {
    return menuItems.map((item, i) => {
      if (item.to) return renderNavLink(i, item, closeMenu);
      return renderClickable(i, item, this.props);
    });
  }

  render() {
    return (
      <ToolbarGroup>
        <DropdownMenu value={defaultSelection} className="quick-dropdown">
          {this.renderMenuItems()}
        </DropdownMenu>
      </ToolbarGroup>
    );
  }
}

export const QuickMenuJest = QuickMenu;

const mapDispatchToProps = dispatch => ({
  closeModal: (...args) => { dispatch(closeModal(...args)); },
  setModal: (...args) => { dispatch(setModal(...args)); }
});

export default connect(cleanMapStateToProps(['location', 'currentDraft']), mapDispatchToProps)(QuickMenu);

【问题讨论】:

  • 你是否被绑定使用material-ui v0?使用 v1 中添加的功能更容易解决此问题。

标签: javascript reactjs components material-ui


【解决方案1】:

我的问题是 CSS 问题,用下面的类修复了它

render() {
    return (
      <ToolbarGroup>
        <DropdownMenu value={defaultSelection} className="quick-dropdown">
          {this.renderMenuItems()}
        </DropdownMenu>
      </ToolbarGroup>
    );
  }

.quick-dropdown {
  position: fixed !important;
  right: -20px !important;
}

【讨论】:

    猜你喜欢
    • 2020-01-19
    • 1970-01-01
    • 2021-10-11
    • 2016-06-05
    • 2019-07-16
    • 1970-01-01
    • 1970-01-01
    • 2020-02-09
    • 1970-01-01
    相关资源
    最近更新 更多