json: https://github.com/120821/react_learn_for_d3_svg_path_20230912/blob/main/src/china_map_new.json

代码:

import React, { useEffect, useRef } from <span style="color:#abe338">&#39;react</span>&#39;<span style="color:#d4d0ab">;</span>
import * as d<span style="color:#f5ab35">3</span> from <span style="color:#abe338">&#39;d3</span>&#39;<span style="color:#d4d0ab">;</span>
//import chinaData from <span style="color:#abe338">&#39;./china.json</span>&#39;<span style="color:#d4d0ab">;</span>
import chinaData from <span style="color:#abe338">&#39;./china_map_new.json</span>&#39;<span style="color:#d4d0ab">;</span>
const ChinaMapForTooltip = () =&gt; {
const mapRef = useRef()<span style="color:#d4d0ab">;</span>
useEffect(() =&gt; {
const svg = d3.select(<span style="color:#ffa07a">mapRef.current</span>)<span style="color:#d4d0ab">;</span>
// 创建投影函数
const projection = d3.geoMercator()
.center([<span style="color:#ffa07a">105</span>, <span style="color:#f5ab35">38</span>])
.scale(<span style="color:#ffa07a">600</span>)
.fitSize([<span style="color:#ffa07a">800</span>, <span style="color:#f5ab35">800</span>], chinaData)<span style="color:#d4d0ab">;</span>
// 创建路径生成器
const path = d3.geoPath()
.projection(<span style="color:#ffa07a">projection</span>)<span style="color:#d4d0ab">;</span>
// 绘制地图路径
svg.selectAll(<span style="color:#abe338">&#39;path</span>&#39;)
.data(<span style="color:#ffa07a">chinaData.features</span>)
.enter()
.append(<span style="color:#abe338">&#39;path</span>&#39;)
.attr(<span style="color:#abe338">&#39;d</span>&#39;, path)
.attr(<span style="color:#abe338">&#39;fill</span>&#39;, <span style="color:#abe338">&#39;none</span>&#39;)
.attr(<span style="color:#abe338">&#39;stroke</span>&#39;, <span style="color:#abe338">&#39;white</span>&#39;)
.attr(<span style="color:#abe338">&#39;stroke-width</span>&#39;, <span style="color:#f5ab35">0.8</span>)
.on(<span style="color:#abe338">&#39;mouseover</span>&#39;, handleMouseOver)
.on(<span style="color:#abe338">&#39;mouseout</span>&#39;, handleMouseOut)<span style="color:#d4d0ab">;</span>
// 处理鼠标悬停事件
function handleMouseOver(<span style="color:#ffa07a">event</span>, d) {
d3.select(<span style="color:#ffa07a">this</span>)
.attr(<span style="color:#abe338">&#39;fill</span>&#39;, <span style="color:#abe338">&#39;none</span>&#39;)<span style="color:#d4d0ab">;</span>
// 在工具提示中显示省份名称
// 这里使用了示例的工具提示样式,你可以根据需要自定义样式
svg.append(<span style="color:#abe338">&#39;text</span>&#39;)
.attr(<span style="color:#abe338">&#39;id</span>&#39;, <span style="color:#abe338">&#39;tooltip</span>&#39;)
.attr(<span style="color:#abe338">&#39;x</span>&#39;, event.pageX + <span style="color:#f5ab35">10</span>)
.attr(<span style="color:#abe338">&#39;y</span>&#39;, event.pageY - <span style="color:#f5ab35">10</span>)
.text(<span style="color:#ffa07a">d.properties.name</span>)<span style="color:#d4d0ab">;</span>
}
// 处理鼠标离开事件
function handleMouseOut() {
d3.select(<span style="color:#ffa07a">this</span>)
.attr(<span style="color:#abe338">&#39;fill</span>&#39;, <span style="color:#abe338">&#39;none</span>&#39;)<span style="color:#d4d0ab">;</span>
// 移除工具提示
svg.select(&#39;<span style="color:#f5ab35">#t</span>ooltip&#39;).remove()<span style="color:#d4d0ab">;</span>
}
}, [])<span style="color:#d4d0ab">;</span>
return (
&lt;svg ref={mapRef} width={<span style="color:#f5ab35">1000</span>} height={<span style="color:#f5ab35">500</span>} /&gt;
)<span style="color:#d4d0ab">;</span>
}<span style="color:#d4d0ab">;</span>
export default ChinaMapForTooltip<span style="color:#d4d0ab">;</span>

然后在app.js里引入即可,视图页面是这样的:

https://github.com/120821/react_learn_for_d3_svg_path_20230912/blob/main/src/all_provinces.png