You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React.js中从SVG地图获取国家数据并更新状态的疑问

解决方案

要获取SVG路径元素的属性并更新App的state,你可以通过React事件对象拿到被点击的DOM元素,再提取所需属性,具体步骤如下:

1. 在onClick回调中获取事件对象与目标元素

修改WorldMap的onClick回调,接收event参数,通过event.target获取被点击的<path>元素。如果路径内部有子元素,建议用closest('path')确保拿到正确的路径节点:

<WorldMap
  onClick={(event) => {
    // 调用侧边栏切换函数(注意要加括号执行)
    handleToggleSidebar();
    
    // 获取被点击的path元素
    const pathElement = event.target.closest('path');
    if (!pathElement) return; // 防止点击到非path元素
    
    // 提取path上的属性
    const countryData = {
      id: pathElement.getAttribute('id'),
      name: pathElement.getAttribute('name'),
      population: pathElement.getAttribute('population'),
      gdp: pathElement.getAttribute('gdp'),
    };
    
    // 更新App的state
    setData(countryData);
  }}
/>

2. (可选)使用标准自定义属性规范

HTML中自定义属性建议以data-前缀命名(比如data-population、data-gdp),这是W3C推荐的规范,也能通过dataset属性更便捷地获取值:

修改SVG的path属性:

<path 
  id="JP"
  name="Japan"
  data-population="123.4mil"
  data-gdp="$123.4mil"
  d="m 956.31178,153.05085 -0.29118,-0.19412...."
/>

对应修改属性提取逻辑:

const countryData = {
  id: pathElement.id, // id是原生属性,可直接读取
  name: pathElement.getAttribute('name'),
  population: pathElement.dataset.population,
  gdp: pathElement.dataset.gdp,
};

3. 确保state更新后侧边栏能接收数据

你的Sidebar组件已经接收data props,只要state正确更新,就能自动渲染对应国家的信息。

内容的提问来源于stack exchange,提问作者chowx054

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 09:22:06