javascript - 如何告诉谷歌地图 API 加载脚本在 React 组件中寻找回调?

标签 javascript ruby-on-rails reactjs google-maps-api-3 react-rails

在我的 Rails 应用程序中,我使用 react.js(react-rails gem)来构建我的应用程序的客户端。
我想使用谷歌地图 API 来实现一些地理定位功能。

class HomePage extends React.Component {
    constructor(props) {
        super(props)
    }

   initGeoTools(){
     console.log('callback invoked');
   }

   render () {
       return(
            <div>
            //..
            <script src="https://maps.googleapis.com/maps/api/js?key=API_KEY&callback=initGeoTools"
async defer></script>
            </div>
        );
    }
}

initGeoTools 不是函数 - 这意味着 API 脚本在此范围内看不到回调函数。

我在某处读到它应该在窗口范围内看到这个函数。 所以我试图像这样破解它:

class HomePage extends React.Component {
    constructor(props) {
        super(props)
    }

  componentWillMount(){
    window.initGeoTools = function(){
      console.log('callback invoked');
    }
}

   render () {
       return(
            <div>
            //..
            <script src="https://maps.googleapis.com/maps/api/js?key=API_KEY&callback=initGeoTools"
async defer></script>
            </div>
        );
    }
}

的确,这行得通,但在这种情况下没有意义,因为从窗口上定义的函数我无法访问 react 组件的东西。

在回调函数中,我想设置状态 api_ready: true 以指示 API 已成功加载。

所以问题是我如何告诉 API 脚本在 React 组件中寻找回调函数?

最佳答案

一周前我要做一个 map 组件,我找到了this article他们使用了三个脚本:

  • 一个用于缓存外部脚本;
  • 使用第一个调用 Google Maps Api;
  • 最后一个是包装器组件,您可以使用它来连接作为 Prop 传递给包装组件的 map api。

关于javascript - 如何告诉谷歌地图 API 加载脚本在 React 组件中寻找回调?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39779947/

相关文章:

javascript - 如何在 JavaScript 中创建动态超时句柄?

javascript - 在 vueJs 上更新 firebase 绑定(bind)数组上的元素

ruby-on-rails - Rails - 在 Devise 中禁用 "already_authenticated"重定向

reactjs - 如何在 React JS 中上传图片?

reactjs - 如何使用 Webpack 和 React 将类型文件作为文本加载?

javascript - 进入对象或对象的对象的条目和键

javascript - 使用 PhoneGap 同步 Dropbox

javascript - 使用 typeahead.js 创建可点击的动态链接

ruby-on-rails - 启动 webpack-dev-server 时配置对象无效

javascript - 使用这个(http-proxy-middleware)后,它在reactjs中给了我这个错误