Ответ намекается в документах:
Люди часто предполагают, что componentWillMount
и componentWillUnmount
всегда связаны, но это не гарантируется
Существует очевидная причина в том, что componentWillMount
запускается, когда компонент собирается смонтировать , поэтому, если монтаж прерван, компонент никогда не будет подключен и, следовательно, никогда не будет отключен. Тем не менее, в предыдущем разделе документа есть подсказка, в которой показан код:
componentWillMount() {
this.setState({
subscribedValue: this.props.dataSource.value,
});
// This is not safe; it can leak!
this.props.dataSource.subscribe(
this.handleSubscriptionChange
);
}
и говорит
Приведенный выше код проблематичен как для рендеринга сервера (если внешние данные не будут использоваться), так и для предстоящего асинхронного режима рендеринга (где запрос может быть инициирован несколько раз).
Исходя из этого, можно предположить, что componentWillMount
работает во время SSR, а также при гидратации на стороне клиента, что означает дополнительный ненужный запрос, вызывающий потенциальную утечку памяти на сервере.
Однако, если вы используете componentDidMount
, то это гарантированно:
- Запуск только на стороне клиента
- Убедитесь, что
componentWillUnmount
всегда будет работать потом