reactjs - 如何使用 Material ui 处理快速拨号操作?

标签 reactjs user-interface material-ui speed-dial

我有三个 Action 支持我的 SpeedDialAction,但是当我尝试记录单个 Action 的 onClick 事件时,我得到了未定义。

我尝试过使用不同的函数作为 Action ,也尝试过在方法调用中使用箭头函数语法

onClick={e => action.action(e)}

onClick={action.action}

Action :

const actions = [
    { icon: <Add />, name: 'Product', action: handleDialogOpen },
    { icon: <Add />, name: 'Addon', action: handleDialogOpen },
    { icon: <Label />, name: 'Tag', action: handleDialogOpen }
  ]

快速拨号:

<SpeedDial
          ariaLabel='SpeedDial example'
          className={classes.speedDial}
          icon={<SpeedDialIcon />}
          onBlur={handleClose}
          onClick={handleClick}
          onClose={handleClose}
          onFocus={handleOpen}
          onMouseEnter={handleOpen}
          onMouseLeave={handleClose}
          open={open}
        >
          {actions.map(action => (
            <SpeedDialAction
              tooltipOpen
              key={action.name}
              icon={action.icon}
              tooltipTitle={action.name}
              onClick={action.action}
            />
          ))}
        </SpeedDial>

handleDialogOpen 只是尝试记录事件

我希望输出是一个事件对象,而不是未定义的。

最佳答案

您可以在actions 数组中定义一个额外的对象项。

const actions = [
    { icon: <Add />, name: 'Product', action: handleDialogOpen, operation: 'product'},
    { icon: <Label />, name: 'Tag', action: handleDialogOpen , operation: 'tag' }
  ]

现在您需要调用处理函数并将operation 值作为参数传递:

//handler function
 function handleClick (e,operation){
   e.preventDefault();
   if(operation=="product"){
     // do something 
   }else if(operation=="tag"){
     //do something else
   }
   setOpen(!open);// to close the speed dial, remove this line if not needed.
 };
<SpeedDial
          ariaLabel='SpeedDial example'
          className={classes.speedDial}
          icon={<SpeedDialIcon />}
          onBlur={handleClose}
          onClick={handleClick}
          onClose={handleClose}
          onFocus={handleOpen}
          onMouseEnter={handleOpen}
          onMouseLeave={handleClose}
          open={open}
        >
          {actions.map(action => (
            <SpeedDialAction
              tooltipOpen
              key={action.name}
              icon={action.icon}
              tooltipTitle={action.name}
              onClick={(e) => {
                      handleClick(e.action.operation)
                 }}
            />
          ))}
        </SpeedDial>

关于reactjs - 如何使用 Material ui 处理快速拨号操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55553033/

相关文章:

reactjs - 使用重新选择选择器时无法提供/测试传奇

html - 将带有操作的 HTML 表单转换为带有逻辑的 React 表单提交

user-interface - vaadin UI.getcurrent 在请求处理程序中返回 null

Java - 编译后GUI不会运行

node.js - React + Material-UI - 警告 : Prop className did not match

javascript - 如何在 react 中导入ipcRenderer?

javascript - getInitialState() 替换现有状态。如何在 React 中传递现有状态?

android - 创建删除线文本?

reactjs - TextField 和 SelectField 之外的组件的错误文本

reactjs - 使用箭头键导航 Material-ui 列表