【问题标题】:React hooks cant get value from stateReact 钩子无法从状态中获取价值
【发布时间】:2021-02-04 03:56:09
【问题描述】:

谁能给我解释一下为什么这样的东西不起作用?

const [myState, setState] = React.useState<any>(undefined);


let someOnClickFunction = (e) => { 
  console.log(myState) //undefined on second click
  if(myState !== e.target) { //error myState is undefined 
    console.log("State is different from event")
  }

 setState(e.target)

}

假设我单击某些东西并触发 someOnClickEvent,myState = undefined for if 语句。 但是,当我第二次单击并触发 someOnClickEvent 时,我希望 myState = e.target 从第一次单击开始,但实际上。 myState 在第二次单击时仍未定义。我真的不明白为什么会这样。

它有点像这样被解雇:

React.useEffect(() => {
  element.on('click', someOnClickFunction)
},[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.
  };

【问题讨论】:

  • 能否提供更完整的代码sn-p?
  • 请显示更多代码
  • 好的,实际代码与原问题有很大不同。见stackoverflow.com/questions/54069253/…——你需要在设置状态后继续使用e.target(它不会立即改变。)

标签: reactjs react-hooks react-functional-component


【解决方案1】:

状态变化是异步的

要遵循它,您可以使用 useEffect

React.useEffect(()=>{
    console.log("in useEffect ",myState)
},[myState])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-09
    • 2020-02-12
    • 1970-01-01
    • 1970-01-01
    • 2020-05-12
    • 2019-09-23
    • 2021-09-29
    相关资源
    最近更新 更多