class Parent extends React.Compоnent {
state = { value: 'value' };
render() {
return <Child value={this.state.value} />;
}
}
class Child extends React.Compоnent {
shouldComponentUpdate(prevProps) {
if (prevProps.value !== this.props.value) {
return false;
}
return true;
}
}
С учетом того что мы выяснили о setState() — итоговое значение score будет не 3, а 1, потому что React не вызывает setState 3 раза, а делает из него один следующий вызов this.setState({score : this.state.score + 1});
this.setState({ score : this.state.score + 1 });
this.setState({ score : this.state.score + 1 });
this.setState({ score : this.state.score + 1 });
score = 0
эквивалентен:this.setState({ score : 0 + 1 });
this.setState({ score : 0 + 1 });
this.setState({ score : 0 + 1 });
this.setState({ score : this.state.score + 1 }, () => {
this.setState({ score : this.state.score + 1 }, () => {
this.setState({ score : this.state.score + 1 });
});
});
score = 0
будет эквивалентен:this.setState({ score : 0 + 1 }, () => {
this.setState({ score : 1 + 1 }, () => {
this.setState({ score : 2 + 1 });
});
});
this.setState(prevState => ({ score: prevState.score + 1 }));
this.setState(prevState => ({ score: prevState.score + 1 }));
this.setState(prevState => ({ score: prevState.score + 1 }));
score = 0
три последовательных обновления можно было бы представить так:({ score: 0 }) => ({ score: score + 1 }) // первое
({ score: 1 }) => ({ score: score + 1 }) // второе
({ score: 2 }) => ({ score: score + 1 }) // третье
Для этого я помещаю пустую функцию, чтобы он обновлялся сразу.
Нашел еще один способ:
или через функцию
Вопрос: как правильно принудительно обновить состояния класса?
{!!subway.length && (
<ul>
{subway.map(station => <li key={station.name}>{station.name}</li>)}
</ul>
)}
{subway.map(station => <div key={station.name}>{station.name}</div>)}