Javascript 传单uunextjs-我的应用程序奇怪地显示标记和弹出窗口

Javascript 传单uunextjs-我的应用程序奇怪地显示标记和弹出窗口,javascript,reactjs,leaflet,next.js,Javascript,Reactjs,Leaflet,Next.js,编辑:我发现要将标记粘贴到位置上,我必须对iconSize和iconAnchor使用相同的值。但仍在寻找如何对齐图标上的弹出窗口。 edit2:edit2更像是一个提示,我认为事实上我的组件呈现得很好,但由于某些原因,当页面计算弹出窗口的位置时,会出现一些延迟,将其置于错误的位置。为了证明这一点,如果我点击图标重新呈现弹出窗口,它会显示在一个相关的位置,只是稍微调整一下。因此,解决方案可能是找到一种方法来重新调整弹出显示。我确认这一提示,使用设置超时来设置弹出解决问题,即使它在黑客方式上,它的工

编辑:我发现要将标记粘贴到位置上,我必须对iconSize和iconAnchor使用相同的值。但仍在寻找如何对齐图标上的弹出窗口。


edit2:edit2更像是一个提示,我认为事实上我的组件呈现得很好,但由于某些原因,当页面计算弹出窗口的位置时,会出现一些延迟,将其置于错误的位置。为了证明这一点,如果我点击图标重新呈现弹出窗口,它会显示在一个相关的位置,只是稍微调整一下。因此,解决方案可能是找到一种方法来重新调整弹出显示。我确认这一提示,使用设置超时来设置弹出解决问题,即使它在黑客方式上,它的工作原理也是如此

我正试图用NextJS制作一张传单地图。 目前,我的应用程序在lng和lat中的位置确定外显示标记和弹出窗口。 我有点困惑,因为只启动CDN,而不启动本地文件。但是,当我把化妆品放在我的应用程序上时,系统就坏了,我的弹出窗口靠近大海,标记器离开去了另一个城市,发生了什么事?我不知道发生了什么事

一个有趣的元素是,当我缩放时,我的图标会靠近这个位置。当我缩放时,图标似乎离位置更远,就像元素没有粘在位置上一样

这是我的沙盒:

下面是一张情况照片:

下面是我的react.js代码:

import React, {Component, Fragment} from "react"; 
import L from "leaflet" 
import   "~/lib/leaflet/leaflet.css"
import "~/lib/leaflet/leaflet"
import styled from "styled-components"
import Head from 'next/head' 

const Wrapper= styled.div`
  width:${props => props.width};
  height:${props => props.height};
`;

export default class Map extends Component{ 
  componentDidMount(){  
    this.map= L.map("map", { 
      center:[37.8349,-122.1297],
      zoom:12,
      zoomControl:true
    })
    L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
      maxZoom: 19,
      attribution: '&copy; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'
    })
    .addTo(this.map)
    var placeholder = L.icon({
      iconUrl: "/static/assets/icons/placeholder.svg",       
      iconSize:     [37, 37],           
      iconAnchor:   [37.8349, -122.1297], // [37,37] to stick icon to location
     relative to the iconAnchor
  });

    var marker = L.marker([37.8349, -122.1297],{icon: placeholder}).addTo(this.map);
    marker.bindPopup("<b>Hello world!</b><br>I am a popup.").openPopup();
  }

  render(){
    // console.log("this.map.invalidateSize: ", this.map) 
    return (
      <Fragment>
          <Head>
          <link rel="stylesheet" href="https://unpkg.com/leaflet@1.4.0/dist/leaflet.css"
   integrity="sha512-puBpdR0798OZvTTbP4A8Ix/l+A4dHDD0DGqYW6RQ+9jxkRFclaxxQb/SJAWZfWAkuyeQUytO7+7N4QKrDh+drA=="
   crossorigin=""/> 

     <script src="https://unpkg.com/leaflet@1.4.0/dist/leaflet.js"
   integrity="sha512-QVftwZFqvtRNi0ZyCtsznlKSWOStnDORoefr1enyq5mVL4tmKB3S/EnC3rRJcxCPavG10IcrVGSmPh6Qw5lwrg=="
   crossorigin=""></script> 


          </Head>
        <Wrapper width="100vw" height="80vh" id="map"/>
        {/* <style jsx global>{lStyle}</style> */}
      </Fragment>
    )
  }
} 
import React,{Component,Fragment}来自“React”;
从“传单”中输入L
导入“~/lib/传单/传单.css”
导入“~/lib/传单/传单”
从“样式化组件”导入样式化
从“下一个/头”导入头
const Wrapper=styled.div`
宽度:${props=>props.width};
高度:${props=>props.height};
`;
导出默认类映射扩展组件{
componentDidMount(){
this.map=L.map(“map”,{
中间:[37.8349,-122.1297],
缩放:12,
动物控制:正确
})
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png'{
maxZoom:19,
属性:“©;贡献者”
})
.addTo(此.map)
变量占位符=L.icon({
iconUrl:“/static/assets/icons/placeholder.svg”,
iconSize:[37,37],
iconAnchor:[37.8349,-122.1297],//[37,37]将图标粘贴到位置
相对于iconAnchor
});
var marker=L.marker([37.8349,-122.1297],{icon:placeholder}).addTo(this.map);
marker.bindPopup(“你好,世界!
我是一个弹出窗口。”).openPopup(); } render(){ //log(“this.map.invalidateSize:”,this.map) 返回( {/*{lStyle}*/} ) } }
任何暗示都很好,
谢谢

我发现要将标记粘贴到位置上,我必须对iconSize和iconAnchor使用相同的值。但是仍然在寻找如何在iconedit2上对齐弹出窗口:edit2更像是一个提示,我认为事实上我的组件呈现得很好,但由于某些原因,当页面计算弹出窗口的位置时,存在一些延迟,将其置于错误的位置。解决方案可能是找到一种方法来重新调整弹出显示。我确认edit2的提示,使用setTimeout来解决问题,即使它是在hackway上,它的工作原理也是如此。我发现,要将标记粘贴到位置上,我必须对iconSize和iconAnchor使用相同的值。但是仍然在寻找如何在iconedit2上对齐弹出窗口:edit2更像是一个提示,我认为事实上我的组件呈现得很好,但由于某些原因,当页面计算弹出窗口的位置时,存在一些延迟,将其置于错误的位置。解决方案可能是找到一种方法来重新显示弹出窗口。我确认edit2的提示,使用setTimeout来解决问题,即使它是在hackway上,它的工作原理也是如此。