reactjs - react-vega - 获取点击事件的数据(为点击事件添加事件监听器)
问题描述
我使用“react-vega”和“react-rooltip”。它工作正常。它获取正确的数据并将其显示在工具提示上。但是我怎样才能得到点击事件的数据呢?我试图在规范中添加信号,但它们不起作用。
这是带有简单 vega 图表的演示: https ://codesandbox.io/s/w2lq37v7ll
我需要修改什么来为点击事件添加一个事件监听器。
我想要的是在用户单击 vega 图表上的任何对象时获得与工具提示相同的数据。
解决方案
下面的代码将点击的国家形状的数据记录到浏览器控制台。
"signals": [
{
"name": "signal_tooltip",
"on": [
{"events": "shape:click", "update": "warn(datum)"}
]
}
],
要收听图表上所有标记项目(代码中的符号类型、形状类型)的事件,请更改{"events": "shape:click", ...
为"events": "*:click", ...}
注意:您也可以使用View API addEventListener作为item
第二个参数。item.datum
将包含单击项目的数据。
view.addEventListener('click', function(event, item) {
console.log(item.datum);
});
完整代码参考(使用信号):
{
"$schema": "https://vega.github.io/schema/vega/v4.json",
"autosize": "pad",
"padding": 5,
"width": 800,
"height": 500,
"style": "cell",
"signals": [
{
"name": "signal_tooltip",
"on": [
{"events": "shape:click", "update": "warn(datum)"}
]
}
],
"data": [
{
"name": "world",
"url": "https://vega.github.io/editor/data/world-110m.json",
"format": {
"type": "topojson",
"feature": "countries"
}
},
{
"name": "source_0",
"values": [
{
"lon": -63.616672,
"lat": -38.416097,
"some_data01": 1000,
"some_data02": 200,
"code": "AR",
"country": "Argentina"
},
{
"lon": 133.775136,
"lat": -25.274398,
"some_data01": 1000,
"some_data02": 200,
"code": "AU",
"country": "Australia"
},
{
"lon": -95.712891,
"lat": 37.09024,
"some_data01": 1000,
"some_data02": 200,
"code": "US",
"country": "UnitedStates"
},
{
"lon": 78.96288,
"lat": 20.593684,
"some_data01": 1000,
"some_data02": 200,
"code": "IN",
"country": "India"
},
{
"lon": -106.346771,
"lat": 56.130366,
"some_data01": 50000,
"some_data02": 2000,
"code": "CA",
"country": "Canada"
},
{
"lon": 138.252924,
"lat": 36.204824,
"some_data01": 60000,
"some_data02": 1000,
"code": "JP",
"country": "Japan"
},
{
"lon": -3.435973,
"lat": 55.378051,
"some_data01": 60000,
"some_data02": 1000,
"code": "UK",
"country": "United Kingdom"
}
]
},
{
"name": "data_1",
"source": "source_0",
"transform": [
{
"type": "geojson",
"fields": ["lon", "lat"],
"signal": "layer_1_layer_0_geojson_0"
},
{
"type": "geopoint",
"projection": "projection",
"fields": ["lon", "lat"],
"as": ["layer_1_layer_0_x", "layer_1_layer_0_y"]
}
]
},
{
"name": "data_2",
"source": "source_0",
"transform": [
{
"type": "geojson",
"fields": ["lon", "lat"],
"signal": "layer_1_layer_1_geojson_0"
},
{
"type": "geopoint",
"projection": "projection",
"fields": ["lon", "lat"],
"as": ["layer_1_layer_1_x", "layer_1_layer_1_y"]
}
]
}
],
"projections": [
{
"name": "projection",
"size": {
"signal": "[width, height]"
},
"fit": {
"signal": "[data('world'), layer_1_layer_0_geojson_0, layer_1_layer_1_geojson_0]"
},
"type": "mercator"
}
],
"marks": [
{
"name": "layer_0_marks",
"type": "shape",
"style": ["geoshape"],
"from": {
"data": "world"
},
"encode": {
"update": {
"fill": {
"value": "lightgray"
},
"stroke": {
"value": "white"
}
}
},
"transform": [
{
"type": "geoshape",
"projection": "projection"
}
]
},
{
"name": "layer_1_layer_0_marks",
"type": "symbol",
"style": ["circle"],
"from": {
"data": "data_1"
},
"encode": {
"update": {
"opacity": {
"value": 0.7
},
"fill": {
"value": "orange"
},
"tooltip": {
"signal": "{\"country\": ''+datum[\"country\"], \"some_data01\": format(datum[\"some_data01\"], \"\"), \"some_data02\": format(datum[\"some_data02\"], \"\")}"
},
"x": {
"field": "layer_1_layer_0_x"
},
"y": {
"field": "layer_1_layer_0_y"
},
"shape": {
"value": "circle"
}
}
}
},
{
"name": "layer_1_layer_1_marks",
"type": "text",
"style": ["text"],
"from": {
"data": "data_2"
},
"encode": {
"update": {
"dy": {
"value": -6
},
"fill": {
"value": "black"
},
"tooltip": {
"signal": "{\"country\": ''+datum[\"country\"], \"some_data01\": format(datum[\"some_data01\"], \"\"), \"some_data02\": format(datum[\"some_data02\"], \"\")}"
},
"x": {
"field": "layer_1_layer_1_x"
},
"y": {
"field": "layer_1_layer_1_y"
},
"text": {
"signal": "''+datum[\"country\"]"
},
"align": {
"value": "center"
}
}
}
}
],
"config": {
"axisY": {
"minExtent": 30
}
}
}
推荐阅读
- powershell - 具有循环的 powershell 任务中的 Azure DevOps task.setVariable 仅设置最后一个变量值
- javascript - 地图 JavaScript 中数字的平均值
- sparql - SPAQRL 创建排除查询
- azure-keyvault - Azure KeyVault 加密 API 终结点不返回 Base64 编码字符串
- c# - 错误:转储到表进程:找不到路径的一部分
- wpf - 如何使 mainWindow 的某些元素在其他视图中通用?
- c++ - 你将如何编写一个函数来创建一个链表?
- mysql - Mysql - 在数组中找到 JSON_CONTAINS
- azure - 如何通过具有最大数据处理限制的 API 处理大量数据
- java - Spring boot webflux R2DBC 性能问题