Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

React Synthetic Event distinguish Left and Right click events

I am trying to distinguish between left and right clicks in an OnClick function. But,

var r = React.createClass({    handleClick : function(e){        //left click        if(e.which==1){            //Do something        }    },    render : function(){        return <p onClick={this.handleClick}>Something </p>    } }); 

Turns out e.which is undefined for Synthetic Events. How can I distinguish between left and right clicks here?

like image 932
Bhargav Ponnapalli Avatar asked Jun 29 '15 07:06

Bhargav Ponnapalli


People also ask

What is correct about synthetic event in React?

In order to work as a cross-browser application, React has created a wrapper same as the native browser in order to avoid creating multiple implementations for multiple methods for multiple browsers, creating common names for all events across browsers.

How do I disable right click in React?

To override the default browser right-click menu, the first step is to prevent the default right-click behavior. This can be done by listening to the contextmenu event and using the preventDefault() method on the event. Next, capture the current (x,y) position, and render your component at that coordinate on the page.

How do you use stopPropagation React?

event.stopPropagation() This will stop any parent component's event from firing. To use this: Make sure to pass the event object as a parameter. Use the stopPropagation method on the event object above your code within your event handler function.


2 Answers

You can do something like this too. Have both onClick and onContextMenu handlers

return <p onClick={this.handleClick} onContextMenu={this.handleClick}>Something </p> 

You can either check for nativeEvent as the other answer suggests or check for type. (Also, prevent default if it is a right click.)

Using type

handleClick: function(e) {   if (e.type === 'click') {     console.log('Left click');   } else if (e.type === 'contextmenu') {     console.log('Right click');   } } 

Using nativeEvent

handleClick: function(e) {   if (e.nativeEvent.which === 1) {     console.log('Left click');   } else if (e.nativeEvent.which === 3) {     console.log('Right click');   } } 

Here is a demo http://jsbin.com/seyeliv/edit?html,output

like image 144
Dhiraj Avatar answered Oct 02 '22 19:10

Dhiraj


The property you're looking for is e.button or e.buttons.

The button number that was pressed when the mouse event was fired: Left button=0, middle button=1 (if present), right button=2.
– MDN:Web/Events/click

However, with or without react, I'm only getting click events with the left mouse button (trackpad). You could use onMouseDown which works for me.

Here's a demo using e.buttons. You may want to preventDefault in onContextMenu also.

like image 23
Brigand Avatar answered Oct 02 '22 20:10

Brigand