javascript - react native : HeadslessJS and Redux - How to access store from task

标签 javascript reactjs redux

我们有一个使用 redux、redux-persist 和 HeadlessJS 任务的 ReactNative 应用程序。此任务需要有权访问商店。由于任务在没有启动整个应用程序的情况下触发(因此默认情况下没有访问权限),我们认为我们也可以简单地在任务中创建商店,以便它可以通过 redux-persist 重新水化。然而,事实证明,以这种方式创建的商店与应用程序中的商店不同:运行后,它们包含不同的值。我们以多种方式对此进行了测试,这似乎确实是商店的问题(而不是例如操作) 我们应该如何从 HeadlessJS 任务访问 Redux 存储?

相关代码: 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,
}

在应用程序中,我们只需使用 react-redux 中的 Provider 来使用商店,在服务中,我们使用 store.dispatch。

最佳答案

对于寻求解决方案的人。我在这里找到了解决方案。 这个想法是将商店绑定(bind)到异步方法。

https://github.com/react-native-kit/react-native-track-player/issues/63

将解决方案复制粘贴到此处。

// index
const store = ...
....registerHeadlessTask('TrackPlayer', () => require('event-handler.js').bind(null, store));
// event-handler.js
module.exports = async (store, data) {
    if(data.type == '...') {
        store.dispatch(...);
    }
};

关于javascript - react native : HeadslessJS and Redux - How to access store from task,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42584880/

相关文章:

javascript - 在浏览器中测试 PhoneGap+AJAX 应用

javascript - 将字符串转换为日期并添加 5 天

javascript - 媒体查询不适用于 React 中的 CSS 模块

javascript - React/Redux 存储状态未保存

javascript - Redux 不会一次向存储发送 2 个属性

javascript - gulp 错误 : unable to minify JavaScript

javascript - 创建一个保留顺序的 javascript 哈希表?

reactjs - 我如何等待 React Query 中的突变执行?

reactjs - 属性 `history` 在 `Router` 中被标记为必需,但其值为 `undefined` 。在路由器中

javascript - 创建按键事件