У нас есть приложение ReactNative, которое использует функции сокращения, редукции-persist и HeadlessJS. Эта задача должна иметь доступ к хранилищу. Поскольку задача запускается без загрузки всего приложения (и поэтому не имеет доступа по умолчанию), мы думали, что можем просто создать хранилище внутри задачи, чтобы оно было регидратировано с помощью сокращения-persist. Оказывается, однако, что созданный таким образом магазин отличается от такового в приложении: после запуска они содержат разные значения. Мы протестировали это несколькими способами, и это действительно проблема с магазинами (а не с действиями, например) Как нам получить доступ к хранилищу Redux из задачи HeadlessJS?
Соответствующий код:
store/configure.js
:
configureStore = (client) => {
const middleware = createMiddleware(client);
const finalCreateStore = applyMiddleware(thunk, middleware, logger)(createStore);
const store = finalCreateStore(rootReducer, undefined, autoRehydrate());
return store;
};
При использовании (как в приложении, так и в сервисе):
const client = new ApiClient();
const store = configureStore(client);
client.setStore(store);
persistStore(store, {
storage: AsyncStorage,
}
В приложении мы просто используем Провайдер от реакции-редукта, чтобы использовать хранилище, в сервисе мы используем store.dispatch.