Ошибка в аппаратном обеспечении React-Native для Android. Нажатие кнопки BackButton «Не определено не является функцией (оценка« _this2.close () »)»

1

Я установил пакет реакции-на-натуру-нагрузка-наложение для применения загрузчика на экране. Когда пользователь нажимает кнопку возврата оборудования, вызывается 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)
  });
}
Теги:
react-native

1 ответ

0
Лучший ответ

Обратитесь к строке 82 исходного кода реакции-native-orientation- this.close() -overlay, она использует функцию this.close() чтобы закрыть Modal, но если обратиться к документации RN 0.41, this.close() не является предварительной -defined для Modal, поэтому он вызвал указанную ошибку, когда typeof this.props.children === 'undefined'. Это ошибка для пакета. Он может иметь новое состояние для управления включением/выключением Modal и разрешить этой функции.close() менять состояние на режим Modal.

  • 1
    Это было действительно полезно. Я объявил функцию 'close ()' внутри файла index.js пакета Reaction-native-Ориентация-Загрузка-Наложения. Так что у меня работает нормально.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню