For some reason, when I change material-ui <SpeedDial> to remove the prop onMouseEnter={handleOpen} so that the speed dial only opens upon clicking the FAB instead of on hover, the onClick event in <SpeedDialAction> does not get triggered when I click a speed dial menu item. I feel like I’m missing something fundamental here.
return (
<SpeedDial
ariaLabel="Add"
className={classes.root}
icon={<SpeedDialIcon />}
onClick={handleClick}
onClose={handleClose}
onBlur={handleClose}
// onMouseEnter={handleOpen}
// onMouseLeave={handleClose}
open={open}
direction={mobile ? 'up' : 'down'}
>
{actions.map(action => (
<SpeedDialAction
key={action.name}
icon={action.icon}
tooltipTitle={action.name}
tooltipOpen
classes={{ staticTooltipLabel: classes.staticTooltipLabel }}
onClick={e => {
e.preventDefault();
alert('x');
}}
/>
))}
</SpeedDial>
);
Advertisement
Answer
Using preventDefault will not cause the click event to not propagate to the parent element (which from what I understand is what you are trying to get).
You should use the stopPropagation instead:
<SpeedDial
ariaLabel="Add"
className={classes.SpeedDial}
icon={<SpeedDialIcon />}
onClick={handleClick}
open={open}
>
{actions.map(action => (
<SpeedDialAction
key={action.name}
icon={action.icon}
tooltipTitle={action.name}
tooltipOpen
onClick={e => {
e.stopPropagation();
alert("x");
}}
/>
))}
</SpeedDial>
Check the following example: https://codesandbox.io/s/speeddial-open-on-click-rleg5?file=/demo.js