Вызвать Java собственный метод модуля из реагировать на собственный компонент не удается - PullRequest
0 голосов
/ 16 февраля 2020

У меня уже есть нативное приложение Java, и я добавляю несколько новых страниц на реагировать нативно. Я пытаюсь реализовать метод в java, который будет вызываться из реактивного компонента при нажатии кнопки «Назад» (как кнопки устройства, так и кнопки на экране). Прямо сейчас кнопка возврата устройства работает отлично, а кнопка на экране - нет! Вот что у меня есть:

У меня есть класс Java с именем SettingsPageModule extension ReactContextBaseJavaModule (я уже зарегистрировал модули и пакеты по мере необходимости), и у этого класса есть метод с именем exitSettingsPage. Это метод, который я хочу вызвать из реагирования.

В компоненте реагирования у меня есть это:

import { BackHandler, NativeModules } from 'react-native';
import { Button } from "native-base";

var SettingsPageModule = NativeModules.SettingsPageModule;

export default class Settings extends Component {
   constructor(props) {
    super(props);
    this.handleBackPress = this.handleBackPress.bind(this);
   }
   ...

   componentDidMount() {
       this.backHandler = BackHandler.addEventListener('hardwareBackPress', this.handleBackPress);
   }

   componentWillUnmount() {
       this.backHandler.remove()
   } 

   handleBackPress = () => {
       console.log("NativeModules", NativeModules); // this is always {}
       console.log("SettingsPageModule", SettingsPageModule);  // this is null only when the  
                                                               // rendered button is pressed
       SettingsPageModule.exitSettingsPage();
   } 

   ...

   render() {
       return (
            ...

               <Button transparent onPress={ this.handleBackPress }>
                 <Icon name='arrow-back' />
               </Button>
            ...
       )
   }
}

Когда нажата кнопка возврата устройства, SettingsPageModule получает значение {"exitSettingsPage": [Function fn], "getConstants": [Function anonymous]}, но когда нажата отрендеренная кнопка, она получает null, что делает мое приложение cra sh. Это действительно странно, что один и тот же объект, используемый в одной и той же функции, имеет разные значения для разных вызовов.

Кто-нибудь знает, почему это происходит? Слушатель событий для BackHandler вызывает функцию по-другому?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...