当我单击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);
}
答案 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 } }))