pet*_*vak 4 javascript typescript reactjs react-leaflet next.js
我正在尝试Leaflet使用 Typescript 在 Next.js 中渲染地图。我读到需要禁用 ssr 以避免“窗口未定义”问题,但在尝试生成地图时:
import React from "react";
import { MapContainer, TileLayer } from "react-leaflet";
export const Leaflet: React.FC = () => {
return (
<MapContainer center={{ lat: 48.71291, lng: 44.52693 }} zoom={13}>
<TileLayer
attribution='© <a href="http://osm.org/copyright%22%3EOpenStreetMap</a> contributors'
url="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png"
/>
</MapContainer>
);
};
Run Code Online (Sandbox Code Playgroud)
这是渲染它的:
const Home: NextPage = () => {
const MapWithNoSSR = dynamic(() => import("../components/Leaflet"), {
ssr: false,
});
return (
<>
<MapWithNoSSR/>
</>
);
};
export default Home
Run Code Online (Sandbox Code Playgroud)
TypesSript 给我这个错误:
'() => Promise<typeof import("/src/components/Leaflet")>' 类型的参数不可分配给 'DynamicOptions<{}> | 类型的参数 加载器<{}>'。类型 '() => Promise<typeof import("/src/components/Leaflet")>' 不可分配给类型 '() => LoaderComponent<{}>'。
并且浏览器给出了这个错误:
错误:元素类型无效。收到的承诺解析为:[对象模块]。惰性元素类型必须解析为类或函数。
这里有没有人经历过类似的事情并有一些关于如何解决它的建议?
您收到这些错误是因为您的Leaflet组件是一个命名模块,并且您尝试像默认模块一样访问它。将您的代码更改为如文档所述:
import { NextPage } from "next";\nimport dynamic from "next/dynamic";\n\n// \xe2\x9a\xa0\xef\xb8\x8f: .then() is needed because the component is not exported with the default keyword\nconst MapWithNoSSR = dynamic(\n () => import("../components/Leaflet").then((module) => module.Leaflet),\n {\n ssr: false,\n }\n);\n\nconst Home: NextPage = () => {\n return (\n <>\n <MapWithNoSSR />\n </>\n );\n};\n\nexport default Home;\nRun Code Online (Sandbox Code Playgroud)\n另外,请注意我将动态导入推到了Home.
| 归档时间: |
|
| 查看次数: |
2840 次 |
| 最近记录: |