[Mapbox]Error: Style is not done loading を解決する

MapboxでLayerのプロパティを変更すると、こんなエラーが出た。
「Error: Style is not done loading」

これは読んでそのまま、ロードイベントが実行される前に描画後のイベントを実行しようとしたためだ。

このコードだと、mapインスタンスが取得されたタイミングで実行されることになります。

  const { map } = useMap();

  useEffect(() => {
    if (map) {
      map.getMap().setLayoutProperty("polygon", "visibility", "none");
    }
  }, [map]);
目次

Styleを読み込んだ後にLayserプロパティを変更させる

Mapboxのライフサイクルにloadイベントがあるのでそれを待ってから、実行するようにする。

マップインスタンスが取得されたタイミングで、loadイベントを紐付けます。
loadイベントは、必要なリソースがすべてダウンロードされ、マップの視覚的に完全なレンダリングが行われた直後に実行されます。
これにより、load時に定義した処理が実行されるようになります。

  useEffect(() => {
    if (map) {
      map.on("load", () => {
        map.getMap().setLayoutProperty("polygon", "visibility", "none");
      });
    }
  }, [map]);

JavaScriptっぽく書いてますが、react-map-glなら、CallbackにonLoadがあるので、こちらを使うほうがスマートだと思います。

Summary

Mapboxのloadイベントを見ている時に、他のイベントを見ていた。
mouseoutイベントなるものがあり、マップキャンバスからマウスカーソルが外れた時に発火されるイベントらしい。何かに使えそう。と思った時間でした。

シェア!

この記事を書いた人

kenichiのアバター kenichi エンジニア・写真家 | Engineer and photographer

日本全国と海外を旅するノマドワーカー。5年間、技術営業として働いたのち独立。
フリーランスエンジニアとしてWebサイト制作やアプリケーション開発を行う。面白い人たちの面白いを世に届けるべく行動中。
2024年11月にポルトガルへ移住🇵🇹

目次