在 leaflet-contextmenu 中更新回调

Updating callbacks in leaflet-contextmenu

问题

我在 react-leaflet v3.2.1 中使用 leaflet-contextmenu v1.4.0。问题是我下面的代码是 showColorcolor 更改时从不更新。

例如,如果 color 在应用程序初始化时是 'blue',showColor 将知道 color'blue'。如果 color 更改为 'red',则 showColor 永远不会更新;它似乎是不可变的。

问题

如何更新 leaflet-contextmenu 菜单项中的回调?

const Component = ({ color: string }) => {
  var map = L.map('map', {
    contextmenu: true,
    contextmenuWidth: 140,
    contextmenuItems: [
      {
        text: 'Show color',
        callback: showColor,
      },
    ],
  });
  
  function showColor() {
    alert(color);
  }
};

我认为你只能实例化地图一次,而不是在每次重新渲染时。相反,只需在每次重新渲染时添加上下文菜单项。

// Only invoke L.map() once
var map = L.map('map', {
    contextmenu: true,
    contextmenuWidth: 140,
});

const Component = ({ color: string }) => {

    // update context menu items anytime color changes
    useEffect(() => {
        map.contextmenu.removeAllItems();
        map.contextmenu.addItem({
          text: 'Show color',
          callback: () => { alert(color) },
        });
    }, [color]);
};