Как вы можете видеть в документации
Это правило должно запрещать использование this.state внутри вызовов setState.Такое использование this.state может привести к ошибкам, когда два вызова состояния вызываются в пакетном режиме и, таким образом, ссылаются на старое состояние, а не на текущее состояние.Примером может служить функция приращения:
function increment() {
this.setState({value: this.state.value + 1});
}
Если эти две операции setState сгруппированы вместе в пакете, это будет выглядеть примерно так, учитывая, что значение равно 1:
setState({value: 1 + 1})
setState({value: 1 + 1})
Этого можно избежать, используя обратные вызовы, которые принимают предыдущее состояние в качестве первого аргумента:
function increment() {
this.setState(prevState => ({value: prevState.value + 1}));
}
Так вот почему у вас есть это правило, чтобы избежать ошибок, подобных этому примеру.
В вашем случае вы должны сделать следующее:
handleSelect({ nativeEvent }) {
if (nativeEvent == null) {
this.setState(previousState => ({
...previousState,
selectedEntry: nativeEvent
}));
} else {
this.setState(previousState => ({
...previousState,
selectedEntry: JSON.stringify(entry),
markerIsEnabled: true
}));
}
}
Но в вашем случае такой ошибки не произойдет, потому что у вас нет двух последовательных setState
, а также ...this.state
или...prevState
не будет иметь никакого значения, потому что вы не используете предыдущее состояние для установки нового состояния.
Так что для кода, который вы указали в своем вопросе, просто удалите ...this.state
, и он будет работать нормально, без ошибок.