У меня уже есть нативное приложение 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
вызывает функцию по-другому?