Обработка ответов на уведомления элегантным способом - React Native - PullRequest
0 голосов
/ 27 марта 2019

Я пытаюсь настроить уведомления в React Native (0.55.4), я использую реагирующую навигацию для рендеринга своих экранов.Все настроено, и я получаю уведомления и могу прочитать полезную нагрузку

Я обратился к следующей странице, чтобы понять, как получен ответ -
https://rnfirebase.io/docs/v5.x.x/notifications/receiving-notifications

Я хотел бычтобы знать, как я могу включить это так, чтобы событие вызывалось на любой странице моей реагирующей навигации при получении уведомления, или оно вызывалось в фоновом режиме и обрабатывалось на основе полезной нагрузки.

В настоящее время оно выполняется только вконструктор, ComponentWillMount и другие общие обратные вызовы, но я бы хотел, чтобы эта функция вызывалась каждый раз, когда я получаю уведомление, независимо от того, на какой странице я нахожусь.

1 Ответ

0 голосов
/ 27 марта 2019

То, что вы ищете, это концепция субъекта.По сути, вам нужно транслировать события в том месте приложения, где вы получаете уведомление.Любые настроенные вами экраны, которые интересуются уведомлениями, могут затем зарегистрироваться для прослушивания этих событий.Вот базовый предмет, реализованный в JS, который я использую в производстве, чтобы делать именно то, что вы описываете.

const _handlers = {}

const Subject = {
  subscribe (...args) {
    const [event, handler] = args

    if (!_handlers[event]) _handlers[event] = []
    _handlers[event].push(handler)
  },
  unsubscribe (...args) {
    const [event, handler] = args

    if (!_handlers[event]) return
    _handlers[event] = _handlers[event].filter(func => func !== handler)
  },
  next (...args) {
    const [event, value] = args

    if (!_handlers[event]) return
    _handlers[event].forEach(handler => {
      if (typeof handler === 'function') {
        handler(value)
      }
    })
  }
}

Object.freeze(Subject)

module.exports = Subject

Вы можете использовать его в своих компонентах следующим образом:

notificationHandler = (payload) => {
  // Do something with the payload in your screen
}

componentDidMount () {
  Subject.subscribe('notification_received', this.notificationHandler)
}

componentWillUnmount () {
  Subject.unsubscribe('notification_received', this.notificationHandler)
}

Когдавы получите уведомление, ваш слушатель уведомления может позвонить Subject.next('notification_received', payload)

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