Как написать в хранилище Redux вне компонента React? - PullRequest
1 голос
/ 19 марта 2020

У меня есть приложение React Native, где я использую Headless JS для вызова обработчика при получении уведомления Firebase Cloud Messaging.

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

import store from '../redux/store';

const backgroundNotificationHandler = async message => {

  const state = store.getState();
...

Мой вопрос: как я могу обновить хранилище способом, который не является «хакерским»?

В настоящее время у меня есть следующая строка в функции:

state.user.wokenFromBackgroundListener = true;

Удивительно, но работает, но это без отправки действия или использования редуктора.

Есть ли лучший способ сделать это?

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

Мой код в индексе. js:

AppRegistry.registerComponent(appName, () => App);
firebase.messaging().setBackgroundMessageHandler(backgroundNotificationHandler);

1 Ответ

1 голос
/ 19 марта 2020

Диспетчеризация от компонентов компонентов - это просто дополнительная функциональность, предоставляемая response-redux . Вы по-прежнему можете использовать обычный избыточный API, в этом случае вы можете отправить в хранилище, используя store.dispatch

store.dispatch({ type: 'SOME_ACTION', payload: [1,2,3] })

Однако я не уверен, следует ли вам это делать, Я не использовал Headless JS сам, но я бы сначала проверил и удостоверился, что эти обработчики задач действительно выполняются в том же контексте, в котором работает ваше приложение (например, убедитесь, что они совместно используют экземпляр хранилища с вашим приложением, а НЕ создают отдельное хранилище). только потому что вы импортируете store в файл с обработчиком)

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