redux-使用Google Maps Service的bindActionCreators竞争条件

时间:2018-11-05 14:58:40

标签: reactjs redux

我最近在一些旧代码中遇到了一个非常奇怪的错误。

此问题的根本原因是,当window属性不存在时,所调用的对象具有从window中提取的依赖项。

function geoActions = (options: { dependencies = {} } = {}) => {
  ...
  const placesService =
    dependencies.placesService ||
    new window.google.maps.places.PlacesService(
      document.getElementById('placesServiceResults'),
    );
  ...
}

然后调用此函数,返回函数对象,并映射为connect。

const mapDispatchToProps = (dispatch) => ({
  geoActions: bindActionCreators(geoActions(), dispatch)
});
export connect(mapStateToProps, mapDispatchToProps)(Comp);

所以,这是奇怪的部分。此捆绑的代码用于两个前端,即公共前端和管理前端。在管理前端中,不会调用google maps。 (当然,gmap应该从软件包而不是从窗口导入,但是我没有编写此代码。)奇怪的是,它仍然可以工作。但是,如果我删除bindActionCreators并将mapStateToProps作为对象传递,则geoActions会中断并且无法解析Google地图。

我的问题是为什么?我以为这可能是一种竞争状况,但这没有任何意义,因为无论如何,谷歌地图不在运行捆绑脚本的窗口中。在调用bindActionCreators之前,geoActions()才真正调用props.geoActions()吗?

0 个答案:

没有答案