Реагировать безопасноSetState - Анти-шаблон или хорошая практика? - PullRequest
0 голосов
/ 28 мая 2018

Недавно я встретился с

«Может обновлять только смонтированный или монтируемый компонент.»

сообщение об ошибке, когда я пытался установить состояние после асинхронной выборкизвонок был сделан.Это произошло из-за того, что компонент был размонтирован до получения ответа http.

Затем я начал поиск в Google и нашел решение проблемы.

Что если переменная содержит «смонтированный» -состояние, и каждый раз, когда я хотел обновить состояние, я просто проверял переменную?Как и в случае с функцией safeSetState ()?

Вот пример:

componentDidMount = () => {
  this._mounted = true;
}

componentWillUnmount = () => {
  this._mounted = false; 
}

safelySetState = (obj) => {
  if(this._mounted)
    this.setState(obj);
}

Затем, каждый раз, когда я хотел обновить состояние, я просто использовал вместо этого функцию this.safelySetState ().

Итак, мой вопрос: Почему бы мне не сделать это?Почему это уже не по умолчанию в React?

1 Ответ

0 голосов
/ 28 мая 2018

Я полагаю, что в React он не используется по умолчанию, так как он выходит за рамки их возможностей.С их стороны не было бы замечательно ничего не делать, если государство не может быть установлено.Скорее логично, что они выдают ошибку, поэтому они сообщают вам, что это невозможно сделать, и оставляют на ваше усмотрение решение этой проблемы.

Кроме того, я бы опасался всегда использовать вашу функцию по тем же причинам.... это может сделать отладку вашего приложения немного сложной и неясной ... возможно, вам следует реализовать ее внешне, а не как функцию ... но встраивать в остальную часть кода и только для крайних случаев, которые действительно нуждаются в этом ..или, по крайней мере, зарегистрировать предупреждение, когда компонент недоступен

...