JSFiddle - React, Tailwind, and code Playground
HTML
<div id="container"></div>
JavaScript
var data = [10, 20, 50, 30];
function clickHandler(d, i) {
// do something with the element/event/data
}
var svg = d3.select('#container')
.append('svg');
var myChart = chart()
.onClick(clickHandler);
svg.append('g')
.datum(data)
.call(myChart);
function chart() {
var onClick = function() {};
function _chart(selection) {
console.log(selection);
selection.each(function(d, i) {
console.log(this);
d3.select(this).selectAll('rect')
.data(d)
.enter()
.append('rect')
.attr('x', 0)
.attr('y', function(d, i) {return i * 11;})
.attr('width', function(d, i) {return d;})
.attr('height', 10)
.on('click', _onClick);
});
}
function _onClick(d, i) {
d3.select(this)
.attr('fill', 'red');
onClick(d, i);
}
_chart.onClick = function(_) {
if(!arguments.length) return onClick;
onClick = _;
return _chart;
}
return _chart;
}