反应setState变量问题

时间:2019-12-03 00:56:08

标签: reactjs

当我单击handleMarker()处理的菜单项时,我正在使用React设置标记的可见性(isMarkerShown)。如果尝试像下面那样设置状态,则会得到未定义的值。

state = {
    collapsed: false,
    visible: false,
    marker: {
      isMarkerShown: false,
      lat: 0,
      lng: 0,
    },
  };

handleMarker() {
    this.setState({marker: this.setState({isMarkerShown: true})});
    console.log(this.state.marker);
  }

3 个答案:

答案 0 :(得分:2)

似乎您可能在更改isMarkerShown时尝试维护其余的标记道具。在这种情况下,以下方法可能会有所帮助:

handleMarker() {
  this.setState({ 
    marker: {
      ...this.state.marker,
      isMarkerShown: true
    }
  });
}

答案 1 :(得分:1)

setState函数是void函数-它不返回任何内容。因此,实际上,如果您将其分配给某个变量,它将保留一个undefined值。

只需尝试直接设置状态:

this.setState((prevState) => ({ 
   marker: {
      ...prevState.marker,
      isMarkerShown: true,
   },
});

答案 2 :(得分:0)

如果在设置状态(例如切换开/关)时需要访问当前/先前状态的值,则可以在setState调用中直接访问它。您还可以使用功能setState 来确保状态更新按顺序进行:

this.setState(prevState => ({ marker: { ...prevState.marker, isMarkerShown: !prevState.marker.isMarkerShown } }))