Реагировать — Должны ли мы проверить, смонтирован ли компонент перед обновлением состояния?

#reactjs #react-native

Вопрос:

На немонтируемых компонентах необходимо ли подтверждать, что компонент смонтирован, прежде чем обновлять состояние?

Я имею в виду, этот код в порядке?

 function UnmountableScreen() {  const isMounted = useIsMounted();   const [isRefreshing, setIsRefreshing] = useState(false);   const handleOnRefresh = async () =gt; {  if(!isMounted()) return;   setIsRefreshing(true);   await asyncOperation();   if(!isMounted()) return; // The component might be unmounted...   setIsRefreshing(true);  }   ... }  

Комментарии:

1. У вас есть реальный минимальный пример варианта использования? Это может быть проблемой XY.

Ответ №1:

Вывод из имени функции handleOnRefresh должен быть прикреплен к компоненту

 lt;Button onClick={handleOnRefresh} label="..."/gt;  

UnmountableScreen необходимо смонтировать для визуализации вышеуказанного компонента, поэтому эти проверки бессмысленны.

Комментарии:

1. Но что, если асинхронная операция займет 10 секунд? и экран был закрыт до того, как он закончился?

2. Это не имеет значения, потому что в любом случае вы не можете изменить состояние размонтированного компонента, вы ждете асинхронного вызова, если компонент размонтирован до тех пор, то последующая проверка бессмысленна