如何从不知道Redux的服务发送动作?

时间:2016-02-15 18:25:14

标签: javascript redux

假设我有一个不了解Redux的地理定位服务,我将其配置如下:

backgroundGeoLocation.configure(
  callback // will be called with an argument when the coordinates change
);

最简单的方法是使服务回调调度Redux操作而不从单独的模块导出store并使用store.dispatch()(因为这将是一个单例)?

2 个答案:

答案 0 :(得分:11)

如果要将某些值传递给JavaScript中的某段代码,则需要使用函数 例如,

function createGeoLocationService(store) {
  let backgroundGeoLocation = new BackgroundGeoLocation()
  backgroundGeoLocation.configure(coordinates => {
    store.dispatch({ type: 'UPDATE_COORDINATES', coordinates })
  })
  return backgroundGeoLocation
}

现在,无论您在何处创建商店,都要创建该服务:

let store = createStore(reducer)
let backgroundGeoLocation = createGeoLocationService(store)

如果您需要在组件中访问它,您可以:

  1. 让它成为单身人士(是的,不是你想要的,但对于仅限客户的应用来说,这是一个有效的选择)
  2. 通过道具明确传递它(可能会变得乏味,但这是最直接和明确的方式)
  3. 通过上下文隐式传递(很容易,但你会处理unstable API that is subject to change所以这是你的良心)

答案 1 :(得分:1)

如果您不想callbackFn了解store.dispatch,那么您必须从{{创建事件流 Observable 之类的内容1}}。完成后,您只需将流映射到callbackFn函数。

您可以使用任何lib来创建流,但我建议使用Rx

在这种方法中,你必须得到类似的东西:

store.dispatch