То, что вы ищете, это концепция субъекта.По сути, вам нужно транслировать события в том месте приложения, где вы получаете уведомление.Любые настроенные вами экраны, которые интересуются уведомлениями, могут затем зарегистрироваться для прослушивания этих событий.Вот базовый предмет, реализованный в 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)