Add*_*bro 5 user-interface reactjs material-ui speed-dial
我有三个操作支持我的 SpeedDialAction,但是当我尝试记录单个操作的 onClick 事件时,我得到了未定义的信息。
我尝试过使用不同的函数作为操作,还在方法调用中尝试了箭头函数语法
onClick={e => action.action(e)}
Run Code Online (Sandbox Code Playgroud)
和
onClick={action.action}
Run Code Online (Sandbox Code Playgroud)
行动:
const actions = [
{ icon: <Add />, name: 'Product', action: handleDialogOpen },
{ icon: <Add />, name: 'Addon', action: handleDialogOpen },
{ icon: <Label />, name: 'Tag', action: handleDialogOpen }
]
Run Code Online (Sandbox Code Playgroud)
快速拨号:
<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>
Run Code Online (Sandbox Code Playgroud)
handleDialogOpen 只是尝试记录事件
我希望输出是一个事件对象,而不是未定义的。
小智 8
您可以在数组中定义额外的对象项actions
。
const actions = [
{ icon: <Add />, name: 'Product', action: handleDialogOpen, operation: 'product'},
{ icon: <Label />, name: 'Tag', action: handleDialogOpen , operation: 'tag' }
]
Run Code Online (Sandbox Code Playgroud)
现在您需要调用处理函数并将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.
};
Run Code Online (Sandbox Code Playgroud)
<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>
Run Code Online (Sandbox Code Playgroud)