【问题标题】:React Native / Redux - store is empty in middlewareReact Native / Redux - 中间件中的商店为空
【发布时间】:2019-02-27 15:47:08
【问题描述】:

我正在创建一个 Redux 中间件,以在 React Native 应用程序中使用 Socket.IO 的单个全局实例。到目前为止一切正常,除了一件事:当通过套接字事件接收数据时,我无法存储它,因为我需要调度一个动作来这样做,我不能这样做,因为我无权访问商店。

根据 Redux doc 中引用的这个例子https://gist.github.com/markerikson/3df1cf5abbac57820a20059287b4be58 和一堆其他在线示例,我应该可以访问中间件中的 store,但 store 是一个空对象。

这是中间件:

const socketMiddleware = (store) => next => action => {

  // ...

  return next(action);
}

export default socketMiddleware;

这就是商店的创建:

export default function configureStore() {
    const middlewares = [
         thunkMiddleware.withExtraArgument({ api }),
         errorMiddleware,
         socketMiddleware,
         promiseMiddleware(),
         isDev() && logger,
    ].filter(Boolean);

    const store = createStore(
         persistedReducer,
         composeWithDevTools(applyMiddleware(...middlewares)),
    );

    const persistor = persistStore(store);

    return { store, persistor };
}

感谢任何帮助!

编辑:更新问题

【问题讨论】:

    标签: react-native redux socket.io


    【解决方案1】:

    我不确定,但如果 redux store 系统像 Vue 的那样工作,你应该可以在你需要的文件中导入 store,并从你导入的包中访问 store。

    import store from 'path/to/store';
    
    // ...
    store.dispatch('action', data) ;
    

    【讨论】:

    • 感谢您的想法,但我不能这样做,因为中间件已在商店中初始化。因此,如果我从定义的路径调用商店,则会导致无限循环:/
    • 那么不要直接导出 store,而是将它存储在一个变量中,然后在你的中间件之后导出它,然后你就可以访问 store
    【解决方案2】:

    问题不在于商店是一个空对象。由于一个愚蠢的错误,我无法调度操作...我试图向其发送数据的减速器不是 combinedReducers() 的一部分,因此从未接收到操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-18
      • 2020-08-23
      • 1970-01-01
      • 2017-06-23
      • 2020-02-06
      • 1970-01-01
      相关资源
      最近更新 更多