Leaplet需要全局窗口对象,如您所知,在SSR上没有window,它将返回错误window is not definded

我搜索了很多,使用宣传单的唯一方法是使用nextjs dynamic导入,但在我的页面上什么也没有找到

这一天,我在网上搜索如何解决这个问题,但到目前为止,我还没有找到任何有用的方法.

我真的需要一个答案

为什么 map 组件无法渲染?

Map.tsx

import { useState } from "react";
import { MapContainer, TileLayer, Marker, useMapEvents } from "react-leaflet";
import "leaflet/dist/leaflet.css";
import "leaflet-defaulticon-compatibility/dist/leaflet-defaulticon-compatibility.css";
import "leaflet-defaulticon-compatibility";

const Map = () => {
  const [position, setPosition] = useState<[number, number]>([51.505, 51.505]);

  // Add Marker on Map onClick
  function Mark() {
    const map = useMapEvents({
      click: ({ latlng }) => {
        setPosition([latlng.lat, latlng.lng]);
      },
    });
    return <Marker position={position} />;
  }

  return (
    <MapContainer
      center={[35.7219, 51.3347]}
      zoom={6}
      scrollWheelZoom={false}
      style={{ height: "50vh" }}
    >
      <TileLayer url="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png" />
      <Mark />
    </MapContainer>
  );
};

export default Map;

我的动态导入

import dynamic from "next/dynamic";
const AdPage = ({ ad }: AdPageProps): JSX.Element => {

  const MapWithNoSSR = dynamic(() => import("./NewAd/map"), {
    ssr: false,
  });

  return (
    <>
            <MapWithNoSSR />
    </>
  );
};

export default AdPage;

推荐答案

在我的应用程序中,我使用与Map组件相同的文件夹中的单独Index.ts文件来动态导入 map

Index.ts

import dynamic from "next/dynamic";

export default dynamic(() => import("./Map"), { ssr: false });

然后在我需要此 map 的位置使用简单导入

import CustomMap from "../Map";

Javascript相关问答推荐

在JavaScript中检索一些文本

积分计算和 colored颜色 判断错误

如何通过onClick为一组按钮分配功能;

如何使用JavaScript用等效的功能性HTML替换标记URL格式?

对象和数字减法会抵消浏览器js中的数字

Vue:ref不会创建react 性属性

我可以使用CSS有效地实现最大宽度=100%和最大高度=100%,而无需父母有明确的/固定的宽度和高度,替代方法吗?

拖放仅通过 Select 上传

如何在不创建新键的情况下动态更改 map 中的项目?

引用在HTMLAttributes<;HTMLDivElement>;中不可用

如何将react—flanet map添加到remixjs应用程序

如何在Angular17 APP中全局设置AXIOS

无法避免UV:flat的插值:非法使用保留字"

当代码另有说明时,随机放置的圆圈有时会从画布上消失

Next.js中的服务器端组件列表筛选

postman 预请求中的hmac/sha256内标识-从js示例转换

如何在Reaction中清除输入字段

在Java脚本中构建接口的对象

在将元素追加到DOM之前,createElement()是否会触发回流?混淆abt DocumentFragment行为

$GTE的mongoose 问题