React Native: состояние набора push-уведомлений для одного сигнала - PullRequest
0 голосов
/ 12 января 2019

Я установил пакет OneSignal на свое собственное приложение реагирования и хочу вставить уведомление в мое состояние, чтобы уведомление было доступно для класса.

Итак, я пытался сделать это до сих пор:

import OneSignal from "react-native-onesignal";

export default class SuperScreen extends Component {
    constructor(props) {
    super(props);
    this.state = {
      showPopup: false,
      pushNotification: null
    };

    OneSignal.init("<mykey>", {kOSSettingsKeyAutoPrompt: true});
    OneSignal.inFocusDisplaying(0);

    OneSignal.addEventListener("opened", this.onOpened);
    OneSignal.addEventListener("ids", this.onIds);
}

componentWillUnmount() {
    OneSignal.removeEventListener("opened", this.onOpened);
}

onOpened(openResult) {
    console.log("Message: ", openResult.notification.payload.body);
    console.log("Data: ", openResult.notification.payload.additionalData);
    console.log("isActive: ", openResult.notification.isAppInFocus);
    console.log("openResult: ", openResult);

    this.setState({ pushNotification: openResult});
}

Но я всегда получаю this.setState(...) это не функция. Поэтому я добавил измененную строку к этому:

this.setState({ pushNotification: openResult}).bind(this);

Однако я все равно получаю тот же результат .. Я просто хочу обновить состояние. Ребята, можете ли вы объяснить мне, почему я получаю это сообщение об ошибке и как я могу это исправить?

С уважением и спасибо!

1 Ответ

0 голосов
/ 12 января 2019

Эта ошибка возникает из-за того, что onOpened не привязан к компоненту класса, поэтому значение this внутри onOpened не соответствует ожидаемому (это просто null).

Чтобы исправить это, вы можете использовать свойства класса + функцию стрелки

onOpened = (openResult) => {
    console.log("Message: ", openResult.notification.payload.body);
    console.log("Data: ", openResult.notification.payload.additionalData);
    console.log("isActive: ", openResult.notification.isAppInFocus);
    console.log("openResult: ", openResult);

    this.setState({ pushNotification: openResult});
}

или вы можете связать его в конструкторе, используя .bind(this)

 constructor(props) {
    super(props);
    this.state = {
      showPopup: false,
      pushNotification: null
    };

    this.onOpened = this.onOpened.bind(this); // <--- here

    OneSignal.init("<mykey>", {kOSSettingsKeyAutoPrompt: true});
    OneSignal.inFocusDisplaying(0);

    OneSignal.addEventListener("opened", this.onOpened);
    OneSignal.addEventListener("ids", this.onIds);
}
...