Я установил пакет реакции-на-натуру-нагрузка-наложение для применения загрузчика на экране. Когда пользователь нажимает кнопку возврата оборудования, вызывается backAndroid addEventListener. В зависимости от условия свойство анимации загрузчика устанавливается в true и загрузчик ориентации начинает загружаться. При загрузке this.fetchData()
другая функция this.fetchData()
, которая извлекает данные, запустив веб-сервис и отображая их в виде списка на той же странице, т.е. mainPage. И при загрузке, если пользователь снова нажал кнопку "Назад", красный экран с ошибкой "Undefined" не является функцией (оценка _this2.close()
) в методе onRequestClose реакции-native-orienation-load-overlay\src\index.js file ". Я пытался использовать BackAndroid.removeEventListener('hardwareBackPress',() => {});
после того, как свойство анимации загрузчика установлено в true, но не работает. Пожалуйста, дайте мне какое-либо решение.
import OrientationLoadingOverlay from 'react-native-orientation-loading-overlay';
<OrientationLoadingOverlay
visible={this.state.animating}
color="#6495ed"
indicatorSize="large"
messageFontSize={16}
message="Loading..."
/>
Код моего прослушивателя событий в фоновом режиме выглядит следующим образом:
BackAndroid.addEventListener('hardwareBackPress', () => {
if(this.state.drawerState===true) {
this.refs['draw'].closeDrawer();
} else {
if(this.props.navigator.getCurrentRoutes().length===1&&
this.state.tagPressed===false){
if (stack.length===0){
Alert.alert(
'Exit',
'Are you sure?',
[
{text: 'Cancel', onPress: () => {return true;}},
{text: 'Yes', onPress: () => BackAndroid.exitApp()},
],
)
} else {
this.backButtonEvent();
}
} else {
if(this.props.navigator.getCurrentRoutes().length===1&&
this.state.tagPressed===true) {
this.setState({ animating: true });
this.setState({ tagPressed: false });
this.setState({ title: 'Repository' });
this.fetchData();
} else {
this.props.navigator.pop();
}
}
}
return true;
});
Здесь stack.length
- это длина массива навигационных маршрутов. И моя backButtonEvent()
выглядит следующим образом:
backButtonEvent() {
if(stack.length===0) {
this.refs['draw'].openDrawer();
} else{
this.setState({animating:true});
dirPath = stack.pop();
title = this.titleStack.pop();
if(stack.length===0) {
this.setState({srcUrl:require('../image/drawer1.png')});
this.setState({drawerLock:'unlocked'});
}
this.fetchData();
}
}
<ListView
dataSource={this.state.dataSource}
renderRow={(this.renderItem.bind(this))}
enableEmptySections = {true}
/>
fetchData(data){
this.setState({
dataSource: this.state.dataSource.cloneWithRows(data)
});
}
Обратитесь к строке 82 исходного кода реакции-native-orientation- this.close()
-overlay, она использует функцию this.close()
чтобы закрыть Modal, но если обратиться к документации RN 0.41, this.close()
не является предварительной -defined для Modal, поэтому он вызвал указанную ошибку, когда typeof this.props.children === 'undefined'
. Это ошибка для пакета. Он может иметь новое состояние для управления включением/выключением Modal и разрешить этой функции.close() менять состояние на режим Modal.