Wir haben eine ReactNative App, die redux, redux-persist und eine HeadlessJS Aufgabe verwendet. Diese Aufgabe muss Zugriff auf das Geschäft haben. Da die Aufgabe ausgelöst wird, ohne die gesamte App zu booten (und daher standardmäßig keinen Zugriff hat), dachten wir, wir könnten einfach den Speicher innerhalb der Aufgabe erstellen, so dass er durch redux-persist rehydriert würde. Es stellt sich jedoch heraus, dass der auf diese Weise erstellte Store sich von dem in der App unterscheidet: Nach dem Ausführen enthalten sie unterschiedliche Werte. Wir haben dies auf verschiedene Arten getestet und es scheint in der Tat ein Problem mit den Speichern (und nicht mit den Aktionen zum Beispiel) Wie sollten wir von einer HeadlessJS Aufgabe auf einen Redux-Speicher zugreifen?React Native: HeadlessJS und Redux - Zugriff auf Geschäft von Aufgabe
Relevante Code: store/configure.js
:
configureStore = (client) => {
const middleware = createMiddleware(client);
const finalCreateStore = applyMiddleware(thunk, middleware, logger)(createStore);
const store = finalCreateStore(rootReducer, undefined, autoRehydrate());
return store;
};
Im Einsatz (sowohl in der App und im Dienst):
const client = new ApiClient();
const store = configureStore(client);
client.setStore(store);
persistStore(store, {
storage: AsyncStorage,
}
In der App wir einfach den Provider verwenden, um von reagieren-Redux Verwenden Sie das Geschäft, in dem Dienst, den wir store.dispatch verwenden.
Für zukünftige Suchende: Da wir es nicht in einem vernünftigen Zeitrahmen arbeiten konnten, haben wir uns für eine nicht-store-basierte Lösung entschieden, um Informationen zwischen der App und der Headless-Aufgabe auszutauschen. Wir haben AsyncStorage verwendet, das zuverlässig zwischen App und Task funktioniert. – Joran
Ich stolperte über das gleiche Problem mit einer Audio-Player-App. Ereignisse vom Audio-Player sollten weiterhin Änderungen an den Redux-Speicher senden, auch wenn sie im Hintergrund sind. – fraherm