假设我有一个不知道Redux的地理定位服务,我将其配置如下:
backgroundGeoLocation.configure( callback // will be called with an argument when the coordinates change );@H_502_3@什么是最简单的方法使服务回调调度Redux操作而不从单独的模块导出存储并使用store.dispatch()(因为这将是一个单例)?
解决方法
@H_403_9@ 如果要将某些值传递给JavaScript中的某段代码,则需要使用函数.例如,
function createGeoLocationService(store) { let backgroundGeoLocation = new BackgroundGeoLocation() backgroundGeoLocation.configure(coordinates => { store.dispatch({ type: 'UPDATE_COORDINATES',coordinates }) }) return backgroundGeoLocation }@H_502_3@现在,无论您在何处创建商店,都要创建该服务:
let store = createStore(reducer) let backgroundGeoLocation = createGeoLocationService(store)@H_502_3@如果您需要在组件中访问它,您可以:
>将其设为单身(是的,不是您想要的,但对于仅限客户的应用来说,这是一个有效的选项)
>通过道具明确传递它(可能会变得单调乏味,但这是最直接和明确的方式)
>通过上下文隐式传递它(非常简单,但你将处理unstable API that is subject to change,所以这是你的良心)