Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Add onClick event to a group element (svg) with react

I'm trying to add an onClick event to an existing svg. Right now I have this :

<g id="Group" onClick={this.clickGroup.bind(this, 1)}>

Which somewhat works but not entirely... The event fires when I click the group but the "zone" that is clickable isn't the same as the group I want to be clickable (it seems completely random to me).

Is there any better way to add events to a <g>element (with React ?) ?

like image 496
Clafou Avatar asked Sep 26 '16 15:09

Clafou


People also ask

Can you add onClick to SVG?

The onclick attribute specifies some script to run when the element is clicked. You can use this attribute with the following SVG elements: <a> <altGlyph>

How do I apply onClick event in Reactjs?

React events are written in camelCase syntax: onClick instead of onclick . React event handlers are written inside curly braces: onClick={shoot} instead of onClick="shoot()" .

Can you add onClick to react component?

The React onClick event handler enables you to call a function and trigger an action when a user clicks an element, such as a button, in your app. Event names are written in camelCase, so the onclick event is written as onClick in a React app. In addition, React event handlers appear inside curly braces.


2 Answers

Use style pointer-events as bounding-box to make the group clickable any where on the group.Even at the empty places

<g id="Group" onClick={this.clickGroup.bind(this, 1)} style="pointer-events: bounding-box;">
like image 65
Nirmalya Kar Avatar answered Oct 16 '22 23:10

Nirmalya Kar


A g element is just an empty container; it can not fire events by itself.

If you run this example, you'll see that you can trigger the click event by clicking on the children of the g element, but you can't if you click in the empty space between them.

You have to use actual shapes to fire events in SVG.

like image 30
Anthony Dugois Avatar answered Oct 16 '22 23:10

Anthony Dugois