2016-05-13 5 views
0

私はここで解決策を試しましたが、Google maps in hidden divが動作しませんでした。それは反応の問題かもしれないと思う。隠れたdivに配置されていない場合、マップは正常に読み込まれます。Googleマップの灰色のボックスが反応するjs内の隠れたdivにある

親コンテナでstate.hideScoreがfalseになると、マップは灰色のボックスとして表示されます。どんな助け?

親コンテナ

<div hidden={this.state.hideScore}>   
<ScoreExplanation score={this.state.score} /> 
<br /> 
<ResultList data={this.state.scoreArray} />  
<ResultMap />   
</div> 

コンポーネント

import React, { Component, PropTypes } from 'react'; 

var $ = require ('jquery'); 
var map; 

var ResultMap = React.createClass({ 
    componentDidMount: function() { 
    // ** Instantiating the Map ** // 
    map = new google.maps.Map(document.getElementById('map'), { 
      center: new google.maps.LatLng(-34.397, 150.644), 
      zoom: 14 
     }); 

     google.maps.event.trigger(map, 'resize'); 
     map.setZoom(map.getZoom()); 
    }, 
    render: function() { 
    return (
     <div style={{overflow:'visible',height:'300px',width:'300px'}} id="map"></div> 
    ); 
    } 
}); 
export default ResultMap; 
+1

あなたが非表示のdivをアクティブにしたとき...あなたが呼び出す(またはリコール)、またはマップを初期化する必要があります...が反応して問題ではありませんすべてのjsのため..ですしてみてくださいdivを表示するときに呼び出すことができる初期化関数を構築する...私は反応することは知らない...私はあなたにコードをshhowすることができます.. – scaisEdge

答えて

1

代わりcomponentDidMountでマップを初期化する親がthis.state.hideScoreを変更するsetStateを呼び出した後に再レンダリングするとき、あなたの代わりにそれを初期化する必要があります。現時点では、マップが親が表示される前にResultMapコンポーネントにロードされています。代わりに、親コンポーネントが表示されるまで待ってから、ResultMapをインスタンス化してください。

例:

親コンポーネントが法

// I prefer using CSS classes to hide/display components. 
// Initialize hideScore to 'hidden' and see CSS. 
render() { 
    return (
    <div className={this.state.hideScore}>   
     <ScoreExplanation score={this.state.score} /> 
     <br /> 
     <ResultList data={this.state.scoreArray} />  
     <div id='result-container'></div> 
    </div> 
) 
} 

親コンポーネントのクリックハンドラメソッドを(どんな方法でもできます)レンダリングします。

handleClick =() => { 
    this.setState({ 
    hideScore: 'shown' // See CSS. 
    }); 
    ReactDOM.render(
    <ResultMap />, 
    document.getElementById('result-container') 
); 
} 

CSS

.shown { 
    display: block; // Or whatever is your preference. 
} 

.hidden { 
    display: none; 
} 
+0

ありがとう! ReactDOM.renderで中括弧を削除する必要がありましたが、それは機能します。 – user935618

+0

なぜ私はそこにそれらを持っていたか分かりません。いいキャッチ! –

関連する問題