2017-05-15 46 views
1

嗨我試圖創建一個模式內的地圖。但地圖只是部分顯示。在創建節點後,我試過invalidatingSIze(),但它似乎不起作用。謝謝!單張ReactJS地圖不完全顯示瓷磚

 

    import React from 'react'; 
    import ReactDOM from 'react-dom' 
    import L from 'leaflet'; 

    class Mapa extends React.Component { 
     constructor(props){ 
      super(props); 
      this.state = { 
      }; 
     } 

     createMap(element){ 
      var map = L.map(element); 
      L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png', { 
       attribution: '© OpenStreetMap contributors' 
      }).addTo(map); 
      return map; 
     } 

     setupMap(){ 
      this.map.setView([this.props.lat, this.props.lon], this.props.zoom); 
      this.map.invalidateSize(); 
     } 

     componentDidMount(){ 
      let self = this; 
      if (this.props.createMap) { 
       this.map = this.props.createMap(ReactDOM.findDOMNode(self)); 
      } else { 
       this.map = this.createMap(ReactDOM.findDOMNode(self)); 
      } 

      this.setupMap(); 
     } 

     render(){ 
      /*Returns div with id map*/ 
     } 
    } 

+0

你的css文件是什麼樣的?有時你需要將地圖div的高度和寬度設置爲100%。 –

+0

嘗試調用'this.map.invalidateSize();'在一個setInterval –

回答

0

最後我固定的。代碼是正確的,但我沒有正確添加傳單依賴關係。一旦我確定所有工作都完美無缺。其實this.map.invalidateSize();沒有必要。

 
    import React from 'react'; 
    import ReactDOM from 'react-dom' 
    import L from 'leaflet'; 

    class Mapa extends React.Component { 
     constructor(props){ 
      super(props); 
      this.state = { 
      }; 
     } 

     createMap(element){ 
      var map = L.map(element); 
      L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png', { 
       attribution: '© OpenStreetMap contributors' 
      }).addTo(map); 
      return map; 
     } 

     setupMap(){ 
      this.map.setView([this.props.lat, this.props.lon], this.props.zoom); 
     } 

     componentDidMount(){ 
      let self = this; 
      if (this.props.createMap) { 
       this.map = this.props.createMap(ReactDOM.findDOMNode(self)); 
      } else { 
       this.map = this.createMap(ReactDOM.findDOMNode(self)); 
      } 

      this.setupMap(); 
     } 

     render(){ 
      /*Returns div with id map*/ 
     } 
    } 

0

我這樣做是使用JSS

import jss from 'jss'; 
import jssDefault from 'jss-preset-default'; 

import 'leaflet/dist/leaflet.css'; 

jss.setup(jssDefault()); 

jss.createStyleSheet({ 
    '@global': { 
    '.leaflet-container': { 
     height: '100%', 
    }, 
    }, 
}).attach(); 

單張使用全局CSS類。所以,你可以使用css-loader只需使用全局樣式:

styles.css

:global { 
    .leaflet-container { 
    height: 100%; 
    } 
} 

component.jsx

import './styles.css'; 
+0

感謝您的信息,我發現它非常有用,但我有依賴問題。 – Antonio682