有人可以给我一个解释,为什么这样的东西不起作用吗?
React.useEffect(() => {
element.on('click', someOnClickFunction)
},[myState])
让我们说我单击了某个东西,并触发了someOnClickEvent,对于if语句,myState = undefined。 但是当我第二次单击并触发someOnClickEvent时,我希望第一次单击myState = e.target但实际上。第二次单击时myState仍未定义。我真的不明白为什么会这样。
像这样被解雇了
React.useEffect(() => {
new L.GeoJSON(getGeoJson(), {
onEachFeature: function (feature, layer) {
layer.on('click', onLayerClick);
layer.on('pm:enable', onLayerEditingStart);
layer.on('pm:disable', onLayerEditingDisable);
layer.on('pm:update', onLayerEdited);
}
}).addTo(features).setStyle({weight: 8});
}, [mapRef, selectedLayer]);
let onLayerClick = (e) => {
if(!(selectedLayer instanceof L.Marker)) { //need this if to have valueof selectedLayer
selectedLayer.setStyle({color: '#3388ff', weight: 5})
}
console.log("selected before")
console.log(selectedLayer) //undefined -- expected value from last click
//selectedLayer = e.target;
setSelectedLayer(e.target)
console.log("selected after")
console.log(selectedLayer) //still undefined -- expected value from state set 2 lines above.
};
问题的特定代码:
e.stopPropagation()
答案 0 :(得分:-1)
状态更改是异步的
要遵循它,您可以使用useEffect
React.useEffect(()=>{
console.log("in useEffect ",myState)
},[myState])