React Material-UI 下拉菜单不起作用

Posted

技术标签:

【中文标题】React Material-UI 下拉菜单不起作用【英文标题】:React Material-UI dropdown menu not working 【发布时间】:2016-02-06 03:12:28 【问题描述】:

我正在使用 Material UI 创建一个简单的图标下拉菜单。但是在渲染字形后,点击它后没有显示MenuItems。这是代码-

import  IconMenu, IconButton  from 'material-ui' ;
const MoreVertIcon = require('material-ui/lib/svg-icons/navigation/more-vert');
const MenuItem = require('material-ui/lib/menus/menu-item');

const PostCard = React.createClass(
    render: function() 
        let button = (
                <IconButton
                    touch=true
                    tooltip='Click to see menu.'
                    tooltipPosition='bottom-left'>
                    <MoreVertIcon />
                </IconButton>
            );
        return (
            <IconMenu iconButtonElement=button>
                <MenuItem primaryText="Refresh" />
                <MenuItem primaryText="Send feedback" />
                <MenuItem primaryText="Settings" />
                <MenuItem primaryText="Help" />
                <MenuItem primaryText="Sign out" />
            </IconMenu>     
        );
    
);

【问题讨论】:

您找到解决方案了吗?这里有完全相同的问题... 【参考方案1】:

只是想添加添加injectTapEventPlugin的原因。

根据300ms tap delay, gone away By Jake Archibald

浏览器停止等待 300 毫秒的双击,并且 react 的 onClick 没有给我们正确的句柄。

根据react-tap-event-plugin git page

Facebook 不打算支持点击事件 (#436),因为浏览器正在修复/移除点击延迟。不幸的是,所有移动浏览器(包括 ios 的 UIWebView)都需要很长时间才能更新。

这就是我们需要注入插件的原因。 关于正确的解决方案,我决定添加包并将其注入应用程序的构造函数(我拥有的更高级别)。

导入:

import injectTapEventPlugin from 'react-tap-event-plugin';

在构造函数内部:

injectTapEventPlugin();

【讨论】:

最佳答案 IMO 如果你使用 React +16.4 你不需要添加插件。只需添加 package.json 依赖项:"react": "16.4.0", "react-dom": "16.4.0" 更新 react 到 16.13 后,我需要删除这个插件。但之后它的下拉菜单不起作用。 @romanown 你能详细说明一下吗?这应该在 React 16 及更高版本中得到解决。 我有项目使用 var injectTapEventPlugin = require("react-tap-event-plugin"); injectTapEventPlugin();将反应从 15.4 更新到 16.13 后,我有错误。所以我发现需要删除这个插件。我删除了这个。错误是出去。 buh 下拉菜单没有工作。我只删除了这 2 个字符串 var injectTapEventPlugin = require("react-tap-event-plugin"); injectTapEventPlugin();可能我需要编辑我的其他代码吗?我尝试v4的material-ui【参考方案2】:

在我的情况下,我必须添加 injectTapEventPlugin 以及更改处理程序。

var injectTapEventPlugin = require("react-tap-event-plugin");
const DropDownMenu = require('material-ui/lib/drop-down-menu');

...

injectTapEventPlugin(); // in constructor 

...

  handleChange(event, selectedIndex, menuItem) 
    this.setState(menu: event.target.value );
  

...
  // in render
  let menuItems = [
        payload: '0', text: 'Mon - Sun' ,
        payload: '1', text: 'Mon - Sat' ,
        payload: '2', text: 'Mon - Fri' ,
        payload: '3', text: 'Mon - Fri / Mon - Thu' ,
    ];
...
  // in render return

  <DropDownMenu menuItems=menuItems selectedIndex=this.state.menu onChange=this.handleChange /> 

【讨论】:

如果我们有 2 个内容相同的下拉菜单怎么办?【参考方案3】:

我遇到了类似的问题。解决方案是将其添加到应用程序的某个位置。我不确定它在哪里重要,但我尽可能在更高级别添加它:

var injectTapEventPlugin = require("react-tap-event-plugin");
injectTapEventPlugin();

【讨论】:

仅供参考。现在已经通过 react v16+ 修复了这个问题。无需添加这些语句。有这些行实际上可能会减慢对用户的点击响应。

以上是关于React Material-UI 下拉菜单不起作用的主要内容,如果未能解决你的问题,请参考以下文章

为 SelectField 显示空白菜单项的正确方法是啥(material-ui,react)

如何更改 React Material-ui Drawer 菜单项间距?

需要在不使用 onChange 回调的情况下获取下拉菜单的值 - (material-ui reactjs)

Material-ui React 组件不起作用

React material-ui KeyboardDatePicker 和 Formik 不起作用

React material-ui 速记类名不起作用?