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

React-Simple-Maps在Next.js项目中无法加载/public目录下本地TopoJSON文件的问题求助

React-Simple-Maps在Next.js项目中无法加载/public目录下本地TopoJSON文件的问题求助

我最近在Next.js项目里用react-simple-maps做一个简单的全球地图,之前这么实现过完全没问题,但这次却卡在了加载/public目录下的TopoJSON文件作为<Geographies/>数据源这一步。

根据react-simple-maps的官方说明,我应该可以直接引用/public里的TopoJSON或GeoJSON文件。下面是我写的最简测试代码:

'use client';
import { ComposableMap, Geography, Geographies } from 'react-simple-maps';

export const MapChart = () => {
  return (
    <ComposableMap className='col-span-3' projection="geoEqualEarth">
      <Geographies geography="/topo.json">
        {( {geographies} ) => geographies.map((geo) => {
          return (
            <Geography 
              key={geo.rsmKey} 
              geography={geo} 
              onClick={() => console.log(geo.properties.name)} 
            />
          )})}
      </Geographies>
    </ComposableMap>
  );
};

我特意确认过,topo.json文件确实存在:浏览器里能直接访问到这个文件,项目的/public文件夹里也能看到它。

我翻了react-simple-maps的源码,发现它会把传给geography属性的字符串当成URL,自动调用fetch()去请求。而且之前也看到不少资料说,fetch()是可以请求/public目录下的资源的,但到我这里就不行了。我现在有点懵:难道这种方式只能在服务端用?但公共资源默认不应该是客户端就能访问的吗?比如项目里的logo,在服务端组件里就能正常加载,完全没毛病。

目前收到的错误提示是“col 1 pos 1有意外字符”,我推测这是因为fetch()请求失败后,错误响应被当成JSON解析导致的。

有没有大佬能指点下:要么怎么让/public里的TopoJSON文件正常被Geographies加载,要么怎么用topojson-client来处理这个问题?

我的依赖版本:

  • react-simple-maps: 3.0.0
  • react: 19.1.0
  • nextjs: 15.4.4

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.07 13:34:33