Я только изучаю React, и не могу понять поведение функции React. Допустим, у меня имеется 2 компонента: родительский и дочерний.
class App extends React.Component {
constructor(props) {
super(props);
this.value = '';
}
render() {
return (
<div className="App">
<input onChange={(e) => {
this.value = e.target.value
}}></input>
<button onClick={() => {
this.setState({value: this.value})
}}>Send</button>
{this.state && <Child newValue={this.state.value}/>}
</div>
);
}
}
class Child extends React.Component {
constructor(props) {
super(props);
this.value = null;
}
componentDidUpdate(prevProps, prevState) {
console.log('prevState')
console.log(prevState);
console.log('this.state')
console.log(this.state)
if (prevState === this.state) {
this.setState({value: this.props.newValue})
}
}
render() {
return (
<div>
Hello!
</div>
)
}
}
При нажатии на button родительский компонент обновляет своё состояние и повторно рендерид дочерний компонент. Но я совершенно не понимаю, почему здесь для корректной работы выполняется условие (prevState === this.state), а не (prevState !== this.state). Выводы из консоли:
// я ввёл в поле инпут единицу и нажал два раза button
// так как в первый раз дочерний элемент только монтируется,
// а обновляется только при втором нажатии
prevState
null
this.state
null
prevState
null
this.state
{value: "1"}
// эти выводы покажутся, если я введу 12 и нажму button
prevState
{value: "1"} // почему здесь выводится значение {value: "1"}, а не null?
// Ведь изменение состояния не было.
this.state
{value: "1"}
prevState
{value: "1"}
this.state
{value: "12"}