reactjs - 如何在 Material 表中显示菜单项

标签 reactjs material-table

我试了一下material table,想在action里面加一个menu item,这样就不会显示太多的edit,delete之类的action了。我在显示菜单项时遇到问题。

示例代码:

<MaterialTable
  columns={[
   { title: t('customer'), field: 'name' },
   { title: t('email'), field: 'email' },
   { title: t('contactNumber'), field: 'contactNumber' },
   { title: t('status'), field: 'status' },
  ]}
  data={list}
  options={{
   headerStyle: {
    backgroundColor: '#00b7b2',
    },
    toolbar: false,
   }}
   actions={[
    {
      icon: 'menu',
      tooltip: 'Menu',
      onClick: (event, rowData) => {
       this.openMenu(event)
         },
       },
      ]}
      components={{
       Action: props => (
        <div>
         <IconButton
           onClick={(event) => props.action.onClick(event, props.data)}
         >
          <Icon>menu</Icon>
         </IconButton>
           <Menu
             anchorEl={this.anchorEl}
             open={Boolean(this.anchorEl)}
             onClick={event => event.stopPropagation()}
             onSelect={event => event.stopPropagation()}
             onClose={this.closeMenu}
           >
             <MenuItem>
                 Action
              </MenuItem>
            </Menu>
         </div>
        ),
      }}
    />

有适合​​我的解决方案吗?

enter image description here

最佳答案

我成功地做到了这一点。基本上你走在正确的轨道上。

按照你上面说的做一个 Action :

  <MaterialTable
      ...
            actions={[
                {
                  icon: MenuIcon,
                  tooltip: 'Actions',
                  isFreeAction: false,
                  onClick: (event, row) => {
                    this.openMenu(event, row);
                  }
                }
             ]}
     ...
  />

然后在渲染中有一个单独的菜单项:

      <Menu
         id="simple-menu"
         keepMounted
         anchorEl={this.state.menuAnchor}
         open={this.state.menuOpen}
         onClose={this.handleMenuClose}
         >
         <MenuItem onClick={this.doSomething}>do something</MenuItem>
         <MenuItem onClick={this.doSomethingElse}>do something else</MenuItem>
       </Menu>
      </center>

技巧是 openMenu() 应该首先获取当前目标:

openMenu(event, row) {
    let anchorElement = event.currentTarget;
    this.setState({currentRow: row}, () => {
      this.setState({menuAnchor: anchorElement});
      this.setState({menuOpen: true});
    });

  }
doSomething() {
   row = this.state.currentRow;

   // do something
}

关于reactjs - 如何在 Material 表中显示菜单项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59433856/

相关文章:

javascript - 当 React.Dispatch<React.SetStateAction<string>> 不被接受时,如何为 setState 函数定义 TypeScript 类型?

javascript - 类型错误 : Class extends value undefined is not a constructor or null (React Meteor Data)

javascript - 有没有办法使用 Material Table React 向每个列标题添加 <label></label>

reactjs - ReactJS 中组件定义缺少显示名称?

reactjs - 基于 react Material 表中的行数据的行操作

reactjs - Material 表内部 onClick 仅显示最后一行值

javascript - react onClick 键码未定义?

javascript - 正则表达式:如何选择两个标题之间的所有内容?

reactjs - Redux:API 成功响应后打开外部 url

reactjs - 如何调整 Material 表的宽度?