2017-02-20 37 views
0

これは、HTMLファイルに適切に私のhtmlコードの作品ですが、私はそれはグーグルが定義されていないエラーをスローコンポーネントを反応させ、私にそれをマージするとき、マップはあなたが故にasynchronousとして、あなたの最初のスクリプトをマークしている私は反応コンポーネントのスクリプトファイルを統合する必要がありますか?

<script src="https://maps.googleapis.com/maps/api/jskey=API_Key&libraries=places&callback=init"async defer></script> 
<script> 
    function init() { 
     var map = new google.maps.Map(document.getElementById('mapcanvas'), { 
      center: {lat: -33.8688, lng: 151.2195}, 
      zoom: 13, 
      mapTypeId: 'roadmap' 
     }); 
    } 
</script> 
+0

あなたは実装と正確なエラーをご返信ください。 ReactJとGoogle APIの両方で作業するには、[react-google-maps](https://github.com/tomchentw/react-google-maps)を使用する必要があります。希望: –

+0

私のコンポーネントにinit()関数をマージすると、 "googleは定義されていません"エラーがスローされます –

答えて

0

が定義されていません。 callback paramが指定されています。そのコールバック関数initをグローバルに定義する必要があり(window.init)、の前にを実行して、競合状態を回避するようにasynchronousスクリプトリクエストを作成する必要があります。

私はあなたのreactコンポーネントがすぐにgoogleへのアクセス権を持っているか、window.initが解決されますPromiseを設定しますスクリプトリクエストsynchronousを作るのいずれかを示唆しています。

// before script 
window.loadGoogle = new Promise(resolve => { 
    window.init =() => { 
    resolve(); 
    } 
}); 

// load async script 

// after script 
class MapComponent extends React.Component { 
    constructor(){ 
    super(...arguments); 
    this.state = { loaded: false }; 
    } 
    componentDidMount(){ 
    window.loadGoogle.then(() => { 
     this.setState({ loaded: true }); 
    }); 
    } 
    render(){ 
    const { loaded } = this.state; 
    if(loaded){ 
     // can now use globals defined by async script 
     return <p>Loaded</p>; 
    } 
    return null; 
    } 
} 
+0

//非同期スクリプトで定義されたグローバルを使用できるようになりました。 .....その曖昧なことは? –

+0

読み込まれたスクリプトによって定義されたグローバル、つまり「google」 – gingur

関連する問題