Альтернативный метод выше, является одним продемонстрировано в esri-react-router-example. Это приложение использует библиотеку с именем esri-loader для ленивой загрузки API ArcGIS только в тех компонентах/маршрутах, где это необходимо. Пример:
Во-первых, установить ESRI-погрузчик libary:
npm install esri-loader --save
затем импортировать функции ESRI-погрузчик в любом реагируют модуль:
import * as esriLoader from 'esri-loader'
Затем ленивым нагрузки на ArcGIS API:
componentDidMount() {
if (!esriLoader.isLoaded()) {
// lazy load the arcgis api
const options = {
// use a specific version instead of latest 4.x
url: '//js.arcgis.com/3.18compact/'
}
esriLoader.bootstrap((err) => {
if (err) {
console.error(err)
}
// now that the arcgis api has loaded, we can create the map
this._createMap()
}, options)
} else {
// arcgis api is already loaded, just create the map
this._createMap()
}
},
Затем загрузите модули ArcGIS API (Dojo), необходимые для создания карты:
_createMap() {
// get item id from route params or use default
const itemId = this.props.params.itemId || '8e42e164d4174da09f61fe0d3f206641'
// require the map class
esriLoader.dojoRequire(['esri/arcgis/utils'], (arcgisUtils) => {
// create a map at a DOM node in this component
arcgisUtils.createMap(itemId, this.refs.map)
.then((response) => {
// hide the loading indicator
// and show the map title
// NOTE: this will trigger a rerender
this.setState({
mapLoaded: true,
item: response.itemInfo.item
})
})
})
}
Преимущество использования Esri-погрузчиком над подход, продемонстрированный выше, что вы не должны использовать загрузчик Dojo и набор инструментов для загрузки и строить все приложение. Вы можете использовать инструментальную цепочку React по вашему выбору (webpack и т. Д.).
Этот blog post объясняет, как работает этот подход, и сравнивает его с другими (аналогичными) подходами, используемыми в таких приложениях, как esri-redux.
FYI, вы не _need_, чтобы ленить загрузить ArcGIS API при использовании esri-loader. Вместо этого вы можете загрузить ArcGIS API через тег script в index.html, например, так: ''. В этом случае приведенный выше код для 'componentDidMount()' будет просто 'this._createMap()'. –