#javascript #reactjs #state #immutability
#javascript #reactjs #состояние #неизменность
Вопрос:
Предположим, что есть два состояния, которые являются одним и тем же объектом, в какой-то момент времени использование setState
для одного объекта также изменяет состояние другого объекта.
Позвольте мне объяснить это с помощью кода;
export default class AgentDetail extends Component {
constructor(props) {
super(props)
this.state = {x: 1, y:1 }
}
componentDidMount() {
let theObject = {
someKey: 'someValue'
}
this.setState({
x: theObject,
y: theObject // I also tried with Object.create(theObject) and Object.assign({}, theObject)
})
this.changeStates()
}
changeStates() {
let otherObject = {
someKey: 'someOtherValue'
}
this.setState({
x: otherObject
})
console.log(this.state.y) // { someKey: 'someOtherValue' }
}
}
Я ожидаю, что y будет «someValue», но оно изменяется на x, и я не смог найти соединение.
Заранее спасибо
Комментарии:
1. Он не мутирует с
x
.setState
Метод не синхронизирован , см. Красную заметку: вы просто проверяетеy
слишком рано. Вы можете использовать обратный вызов, чтобы что-то сделать, когда состояние было изменено :this.setState(..., function() { console.log(this.state.y); });
.2. @lorenzo-s да, я знаю
setState
, что это асинхронный процесс, но не имеет значения, если я войдуy
вsetState
обратный вызов, результат будет тот же.3. Тоже мне, все в порядке, я протестировал ваш же код здесь . Если у вас все еще есть проблемы, посмотрите весь свой код, может быть, где-то есть какой-то побочный эффект.