Javascript setFeatureState是否未更新映射框中的值?
我试图在mapbox中单击圆时更新圆的笔划。我遵循了mapbox的文档,但它似乎没有更新值。控制台也很清楚Javascript setFeatureState是否未更新映射框中的值?,javascript,vue.js,mapbox,Javascript,Vue.js,Mapbox,我试图在mapbox中单击圆时更新圆的笔划。我遵循了mapbox的文档,但它似乎没有更新值。控制台也很清楚 t.map.addLayer({ id: id, type: 'circle', source: id, paint: { 'circle-radius': 100, 'circle-opacity': 0.5, 'circle-color': 'rgba(20, 106, 181, 0.11)', 'ci
t.map.addLayer({
id: id,
type: 'circle',
source: id,
paint: {
'circle-radius': 100,
'circle-opacity': 0.5,
'circle-color': 'rgba(20, 106, 181, 0.11)',
'circle-stroke-color': [
'case', ['boolean', ['feature-state', 'clicked'], false],
'rgba(20, 106, 181, 0.11)',
'#146ab5',
],
'circle-stroke-width': [
'case', ['boolean', ['feature-state', 'clicked'], false],
2,
0,
],
},
});
然后,我正在尝试更新状态:
t.map.on('click', id, (e) => {
t.map.setFeatureState({ source: id, id: id }, { clicked: true });
});
我已经缓慢地通过了,但是值没有更新。
感谢查看您的示例,您的id引用似乎不正确。对于层中的每个元素,必须存在唯一的ID,这可以轻松地添加到源数据中
t.map.addSource('sourceId', {
'type': 'dataType',
'data': yourData,
'generateId': true // This ensures that all features have unique IDs
});
此外,添加后,您必须在每个setFeatureState更新中找到并引用此唯一id:
t.map.on('click', id, (e) => {
let uniqueId = e.features[0]['id'];
t.map.setFeatureState({ source: id, id: uniqueId }, { clicked: true });
});
我自己现在也在为一个类似的问题苦苦挣扎,希望这个输入能有所帮助(我绝不是MapBox GL JS的专家)。以上示例均采用MapBox文档中的示例。啊,你绝对是超级巨星!我尝试了各种各样的方法,生成ID…使用我已经拥有的ID,非常感谢!