我最近在一些旧代码中遇到了一个非常奇怪的错误。
此问题的根本原因是,当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()
吗?