Автоматическое открывание всплывающих маркеров на карте реакционных листовок

Я использую некоторые маркеры на карте реактивных листовок, чтобы показать различный текст.
Но я не могу найти флаг для всплывающей подсказки autoOpen.

Я получаю (position, children, onOpen, onClose) в качестве доступных атрибутов.

render() {
    return (
        <div className={'ShapeLayer'}>
            {
                this.shapes.map(shape => {
                    return (
                        <Marker key={shape['id']} position={shape['coordinates']} draggable={false} opacity={1}>
                            <Popup>
                                <span>{shape['text']}</span>
                            </Popup>
                        </Marker>
                    );

                })
            }
        </div>
    )
}

Это делается с помощью этого кода на родной листовке

var marker = L.marker(shapess[i]['coordinates'], {
        opacity: 0.01
    }).bindTooltip(shapess[i]['text'],
        {
            permanent: true,
            className: "shapesText" + i,
            offset: [0, 0],
            direction: "center"
        }
    ).openTooltip().addTo(mymap);

Как я могу сделать то же самое на Reaction_leflet

2 ответа

Решение

Вы можете использовать всплывающую подсказку вместо всплывающего окна, если оно только для текста, а затем использовать permanent атрибут в подсказке.

 <Marker key={shape['id']} position={shape['coordinates']} draggable={false} opacity={1}>
    <Tooltip permanent>
          <span>{shape['text']}</span>
    </Tooltip>
</Marker>

Вот источник дополнительных примеров:

реагируют-листовку / например / компоненты / tooltip.js

Обновление: 2023 г. Используйте setTimeout для доступа к openPopup() в маркере.

      import { MapContainer, TileLayer, Marker, Popup } from 'react-leaflet';
import L from 'leaflet';
import 'leaflet/dist/leaflet.css';
import { useRef } from 'react';

const Location = () => {
  const position = [6.632264, 124.597816];
  const laptopMarker = L.icon({
    iconUrl: './icons/laptop.gif',
    iconSize: [40, 40],
    popupAnchor: [0, -20],
  })

  const marker = useRef(null);
  return (
    <MapContainer whenReady={() => {
      setTimeout(() => {
        marker.current.openPopup();
      }, 3000);
    }} center={position} zoom={9} scrollWheelZoom={false} >
      <TileLayer
        attribution='&copy; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a>'
        url="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png"
      />
      <Marker ref={marker} position={position} icon={laptopMarker}>
        <Popup maxWidth={250}>
          Hi! <img src='./icons/wave.gif' width='15' height='15' className='inline-block mb-1 mr-1' /> are you interested where I live?
          You can find me here!
        </Popup>
      </Marker>
    </MapContainer >
  )
}

export default Location;
Другие вопросы по тегам