2016-01-01 2 views
0

Я создаю приложение с использованием Semantic UI и ReactJS. Я использую модуль табуляции, чтобы содержать мою карту, которая использует библиотеку Javascript Leaflet для отображения карты.ReactJS with Leaflet: плитки отображаются неправильно до обновления страницы

Проблема в том, что плитки отображаются неправильно до тех пор, пока страница не будет изменена.

является то, что я пробовал:

MapComponent = React.createClass({ 
    componentDidMount() { 
    let map = L.map('map') 
    L.tileLayer.provider('Thunderforest.Outdoors').addTo(map) 
    map.setView([lat, long], zoom) 
    map.invalidateSize(false) 
    } 
} 

Который, похоже, не решить эту проблему.

Я попытался установить тайм-аут, так как:

MapComponent = React.createClass({ 
    componentDidMount() { 
    let map = L.map('map') 
    L.tileLayer.provider('Thunderforest.Outdoors').addTo(map) 
    Meteor.setTimeout(() => { 
     map.invalidateSize(false) 
    }, 2000) 
    map.setView([lat, long], zoom) 
    } 
}) 

Который иногда работал, установив таймер на 2000, но иногда это необходимо, чтобы быть установлен в 5000, который является немного сумасшедшим, на мой взгляд.

Из того, что я прочитал, вызов функции invalidateSize() должен устранить проблему. Любая помощь в решении этой проблемы была бы весьма признательна. Спасибо.

+0

ли вы назвать 'invalidateSize()' ** после ** отображается ваша вкладка/ее размер вычисляется? – ghybs

ответ

2

Позвоните invalidateSize после того, как откроется вкладка, содержащая вашу карту. В закладке модуля Semantic UI, вы можете сделать это с помощью onVisible обратного вызова:

Вызывается после вкладки становится видимым

http://semantic-ui.com/modules/tab.html#/settings

<div class="ui menu top"> 
    <a class="item" data-tab="map">Map</a> 
</div> 

$('.top.menu .item').tab({ 
    'onVisible': function() { 
     // Do stuff 
    } 
}); 
+0

Допустим, что каждая вкладка является ее собственной компонентой React. Есть ли способ, который я могу назвать этой функцией jquery, если мое меню находится в одном компоненте, а мое представление карты - в другом компоненте? – user2840647

+0

Вы можете поделиться экземпляром карты через состояние компонента, см. Этот вопрос и ответ: http://stackoverflow.com/questions/34337330/access-object-from-multiple-react-components – iH8

Смежные вопросы