You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React组件同时导出connect与GoogleApiWrapper报错求助

解决connect与GoogleApiWrapper嵌套导出的错误问题

这个错误的核心是高阶组件的嵌套顺序和调用方式错了,咱们一步步拆解:

问题根源

你写的代码是:

export default connect( mapStateToProps, { saveMapCoords } )( GoogleApiWrapper({ apiKey: 'xxx' }) )(Maps)

这里的GoogleApiWrapper({ apiKey: 'xxx' })返回的是一个高阶组件函数(它需要接收一个React组件才能生成最终的组件),但connect(...)返回的函数只能接收React组件实例,不能接收另一个高阶函数。当你把GoogleApiWrapper(...)传给connect(...)的返回函数时,它会把这个函数当成组件去处理,自然就抛出了is not a function的错误。

正确的写法

你需要先让其中一个高阶组件完成对原始Maps组件的包裹,再把生成的新组件传给另一个高阶组件,两种顺序都可以,看你的需求:

方式1:先连接Redux,再包裹Google API

// 先把Maps组件连接到Redux
const ConnectedMaps = connect(mapStateToProps, { saveMapCoords })(Maps);
// 再用GoogleApiWrapper包裹连接后的组件
export default GoogleApiWrapper({ 
  apiKey: 'AIzaSyA5EqRGJ-YR-2ZCGxThhtFZKwNBy6wk73c' 
})(ConnectedMaps);

方式2:先包裹Google API,再连接Redux

// 先给Maps组件加上Google API支持
const MapsWithGoogle = GoogleApiWrapper({ 
  apiKey: 'AIzaSyA5EqRGJ-YR-2ZCGxThhtFZKwNBy6wk73c' 
})(Maps);
// 再把这个带API的组件连接到Redux
export default connect(mapStateToProps, { saveMapCoords })(MapsWithGoogle);

链式简写(推荐)

如果喜欢一行写完,可以把嵌套关系用括号明确起来:

export default GoogleApiWrapper({ 
  apiKey: 'AIzaSyA5EqRGJ-YR-2ZCGxThhtFZKwNBy6wk73c' 
})(
  connect(mapStateToProps, { saveMapCoords })(Maps)
);

或者反过来:

export default connect(mapStateToProps, { saveMapCoords })(
  GoogleApiWrapper({ 
    apiKey: 'AIzaSyA5EqRGJ-YR-2ZCGxThhtFZKwNBy6wk73c' 
  })(Maps)
);

两种顺序的区别不大,主要看你是否需要在Redux连接逻辑中访问Google API提供的props(如果需要,就选方式2,先包API再连Redux)。

内容的提问来源于stack exchange,提问作者Trisma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:43:24