【问题标题】:How to save one signal player id in react native state如何在反应原生状态下保存一个信号播放器 ID
【发布时间】:2018-08-25 14:06:45
【问题描述】:

我是原生反应新手,我正在使用一个信号进行通知。我从OneSignal.configure(); 获得了一个信号用户玩家 ID,并按照我已经完成的代码,但我只能在控制台上看到该玩家 ID。我正在使用setState 保存状态,但它显示setState is not a function 的错误。我怎样才能让玩家 id 将其保存在状态中。

代码:

componentWillMount() {
          OneSignal.init("d447e6e2-0c8e-4781-8292-6e77d2e86691");

          OneSignal.configure();
          OneSignal.addEventListener('received', this.onReceived);
          OneSignal.addEventListener('opened', this.onOpened);
          OneSignal.addEventListener('ids', this.onIds);
      }

      componentWillUnmount() {
          OneSignal.removeEventListener('received', this.onReceived);
          OneSignal.removeEventListener('opened', this.onOpened);
          OneSignal.removeEventListener('ids', this.onIds);
      }

      onReceived(notification) {
          console.log("Notification received: ", notification);
      }

      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);
      }

      onIds(device) {
        console.log('Device info: ', device);
      console.log('player id: ', device.userId);
       this.setState({
            pid: device.userId,
          })
       console.log(this.state.pid);
      }

【问题讨论】:

  • 使用bindOneSignal.addEventListener('ids', this.onIds.bind(this));
  • @azium yehh 非常感谢。它的工作。

标签: reactjs react-native push-notification react-native-android onesignal


【解决方案1】:

事件侦听器函数不知道您的this,因此您必须使用bind 将您的this 放入其中。

componentWillMount() {
    OneSignal.init('ONESIGNAL-APP-ID');

    OneSignal.addEventListener('received', this.onReceived.bind(this));
    OneSignal.addEventListener('opened', this.onOpened.bind(this));
    OneSignal.addEventListener('ids', this.onIds.bind(this));
    OneSignal.configure();
}

更新

你也可以声明为箭头函数来避免.bind(this):

componentWillMount() {
    OneSignal.init('ONESIGNAL-APP-ID');

    OneSignal.addEventListener('received', this.onReceived);
    OneSignal.addEventListener('opened', this.onOpened);
    OneSignal.addEventListener('ids', this.onIds);
    OneSignal.configure();
}

onReceived = () => {}
onOpened = () => {}
onIds = () => {}

【讨论】:

    猜你喜欢
    • 2017-02-12
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 2019-04-29
    • 1970-01-01
    • 2021-03-23
    • 2020-05-13
    相关资源
    最近更新 更多