JSFiddle - React, Tailwind, and code Playground
by Tristen Brown
HTML
<link rel="stylesheet" href="https://api.mapbox.com/mapbox-assembly/mbx/v1.2.0/assembly.min.css">
<script src="https://api.mapbox.com/mapbox-gl-js/v3.3.0/mapbox-gl.js"></script>
<link rel="stylesheet" href="https://api.mapbox.com/mapbox-gl-js/v3.3.0/mapbox-gl.css">
<div id="map" class="absolute top bottom left right w-full"></div>
JavaScript
mapboxgl.accessToken =
"pk.eyJ1IjoibWFwYm94c2F0ZWxsaXRlIiwiYSI6ImNqZWZ0MHg0djFqZWoyeG9kN3ZiMmkyd3cifQ.y2HNjGo7FcKQ7psI_BfGqQ"
const style = {
version: 8,
name: "Blank",
sources: {
composite: {
url: "mapbox://mapbox.mapbox-streets-v8",
type: "vector",
promoteId: {
water: "water"
}
},
},
glyphs: "mapbox://fonts/mapbox/{fontstack}/{range}.pbf",
projection: { name: "globe" },
layers: [
{
id: "background",
type: "background",
paint: { "background-color": "rgb(162, 240, 61)" },
},
{
id: "water",
type: "fill",
source: "composite",
"source-layer": "water",
paint: {
"fill-color": [
"case",
["to-boolean", ["feature-state", "hovered"]],
"red",
"rgb(87, 161, 239)",
],
},
},
],
}
var map = (window.map = new mapboxgl.Map({
container: "map",
style,
}))
map.on("mousemove", "water", (e) => {
console.log(e.features[0]); // Why is `id` undefined?
if (e.features.length > 0) {
const { id, layer } = e.features[0];
const { source, "source-layer": sourceLayer } = layer
if (id) {
map.setFeatureState({ id, source, sourceLayer }, { hovered: true })
}
}
})