#reactjs #react-native
#reactjs #реагирует на собственный
Вопрос:
Я пытаюсь избежать отображения предупреждения в React Native более одного раза. Для этого я пытаюсь обновить состояние внутри условия, которое находится внутри useEffect:
const [permissionStatus, setPermissionStatus] = useState('');
const [permissionsAlertShown, setPermissionsAlertShown] = useState(false);
useEffect(() => {
function handleAppStateChange() {
if (
AppState.currentState === 'active' amp;amp;
permissionStatus === 'denied' amp;amp;
!permissionsAlertShown
) {
setPermissionsAlertShown(true);
Alert.alert(
...
);
}
}
AppState.addEventListener('change', handleAppStateChange);
}, [permissionStatus, permissionsAlertShown]);
Моя проблема в том, что если я отхожу от своего приложения и возвращаюсь к нему, AppState.currentState изменяется и, поскольку setPermissionsAlertShown(true)
игнорируется, мне снова отображается предупреждение.
Как мне справиться с этой ситуацией?
Комментарии:
1. Вам просто нужно сохранить состояние в AsyncStorage
2. Откуда
AppState
берется?3. @Maxwells.c не могли бы вы опубликовать пример?
4. @hackape AppState происходит от React Native
Ответ №1:
Ответом было создание функции обратного вызова, которая удалит слушателя. Я поделюсь, если кто-то еще когда-нибудь будет искать это.
const [permissionStatus, setPermissionStatus] = useState('');
const [permissionsAlertShown, setPermissionsAlertShown] = useState(false);
const handleAppStateChange = useCallback(() => {
if (
AppState.currentState === 'active' amp;amp;
permissionStatus === 'denied' amp;amp;
!permissionsAlertShown
) {
setPermissionsAlertShown(true);
Alert.alert(
...
);
}
}, [permissionStatus, permissionsAlertShown]);
useEffect(() => {
AppState.addEventListener('change', handleAppStateChange);
return () => AppState.removeEventListener('change', handleAppStateChange);
}, [handleAppStateChange]);
Ответ №2:
Вам просто нужно сохранить состояние с помощью AsyncStorage или какого-либо другого хранилища.
Идеальный случай — использовать то, что сохранилось от вашего действия (разрешение включено, данные API сохранены и т. Д.).
Комментарии:
1. Попробуйте сначала изучить AsyncStorage. Затем, если вы все еще не можете понять это, вы можете прокомментировать то, что хотите