#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. Это не имеет значения, потому что в любом случае вы не можете изменить состояние размонтированного компонента, вы ждете асинхронного вызова, если компонент размонтирован до тех пор, то последующая проверка бессмысленна