【问题标题】:How show menu item in Material Table如何在材料表中显示菜单项
【发布时间】:2019-12-21 06:01:37
【问题描述】:

我试了一下材质表,想在action中添加一个菜单项,这样就不会显示太多的action比如edit,delete。我在显示菜单项时遇到问题。

示例代码:

<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>
        ),
      }}
    />

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

【问题讨论】:

    标签: reactjs material-table


    【解决方案1】:

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

    按照上面所说的进行操作:

      <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
    }
    

    【讨论】:

    • 很好的答案。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2019-05-30
    • 2015-01-26
    • 2017-09-20
    • 2021-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-26
    相关资源
    最近更新 更多