react-map-gl Style Uncaught Error: Style is not done loading
react-map-gl Style Uncaught Error: Style is not done loading
我正在使用 React-MAP-GL,但在尝试更新 样式未完成加载 时出现问题=11=]对象。
import React from 'react';
import ReactMapGL from 'react-map-gl';
import {defaultMapStyle, dataLayer} from './map-style.js';
import {fromJS} from 'immutable';
import geoJson from './cali.json';
export default class Map extends React.Component {
constructor(props) {
super(props);
this.state = {
mapStyle: defaultMapStyle,
data: null,
viewport: {
width: 600,
height: 800,
latitude: 36.7783,
longitude: -119.4179,
zoom: 5,
},
};
}
componentDidMount() {
window.addEventListener('resize', this._resize);
this._loadData(geoJson);
}
_loadData = data => {
const mapStyle = defaultMapStyle
.setIn(['sources', 'incomeByState'], fromJS({type: 'geojson', data}))
.set('layers', defaultMapStyle.get('layers').push(dataLayer));
this.setState({data, mapStyle});
};
render() {
return (
<div>
<ReactMapGL
{...this.state.viewport}
mapStyle={this.state.mapStyle}
onViewportChange={viewport => {
this.setState({viewport});
}}
mapboxApiAccessToken=""
/>
</div>
);
}
}
react-map-gl 上的示例对我不起作用,而这正是他们所做的。我认为他们的方法之所以有效,只是因为 requestJson
在回调中有 this._loadData
,但我正在预加载 geojson
.
componentDidMount() {
window.addEventListener('resize', this._resize);
this._resize();
requestJson('data/us-income.geojson', (error, response) => {
if (!error) {
this._loadData(response);
}
});
}
但我确实找到了一些修复它的方法:
选项#1:
setTimeout(() => this._loadData(geoJson), 1);
连1milli-second用原方法解决问题
选项#2:
不要使用 ComponentDidMount
加载数据,只需将 onClick
或 'onScroll' 事件放在其他地方即可加载数据。有点老套...
选项#3:
使用onLoad
!由于某些原因,我一开始没有找到这个方法...
<MapGL
ref={map => (this.mapRef = map)}
{...this.state.viewport}
mapStyle={this.state.mapStyle}
onLoad={() => this._loadData(geoJson)}
onViewportChange={viewport => {
this.setState({viewport});
}}
mapboxApiAccessToken="8jiOnPbYA"
/>
我正在使用 React-MAP-GL,但在尝试更新 样式未完成加载 时出现问题=11=]对象。
import React from 'react';
import ReactMapGL from 'react-map-gl';
import {defaultMapStyle, dataLayer} from './map-style.js';
import {fromJS} from 'immutable';
import geoJson from './cali.json';
export default class Map extends React.Component {
constructor(props) {
super(props);
this.state = {
mapStyle: defaultMapStyle,
data: null,
viewport: {
width: 600,
height: 800,
latitude: 36.7783,
longitude: -119.4179,
zoom: 5,
},
};
}
componentDidMount() {
window.addEventListener('resize', this._resize);
this._loadData(geoJson);
}
_loadData = data => {
const mapStyle = defaultMapStyle
.setIn(['sources', 'incomeByState'], fromJS({type: 'geojson', data}))
.set('layers', defaultMapStyle.get('layers').push(dataLayer));
this.setState({data, mapStyle});
};
render() {
return (
<div>
<ReactMapGL
{...this.state.viewport}
mapStyle={this.state.mapStyle}
onViewportChange={viewport => {
this.setState({viewport});
}}
mapboxApiAccessToken=""
/>
</div>
);
}
}
react-map-gl 上的示例对我不起作用,而这正是他们所做的。我认为他们的方法之所以有效,只是因为 requestJson
在回调中有 this._loadData
,但我正在预加载 geojson
.
componentDidMount() {
window.addEventListener('resize', this._resize);
this._resize();
requestJson('data/us-income.geojson', (error, response) => {
if (!error) {
this._loadData(response);
}
});
}
但我确实找到了一些修复它的方法:
选项#1:
setTimeout(() => this._loadData(geoJson), 1);
连1milli-second用原方法解决问题
选项#2:
不要使用 ComponentDidMount
加载数据,只需将 onClick
或 'onScroll' 事件放在其他地方即可加载数据。有点老套...
选项#3:
使用onLoad
!由于某些原因,我一开始没有找到这个方法...
<MapGL
ref={map => (this.mapRef = map)}
{...this.state.viewport}
mapStyle={this.state.mapStyle}
onLoad={() => this._loadData(geoJson)}
onViewportChange={viewport => {
this.setState({viewport});
}}
mapboxApiAccessToken="8jiOnPbYA"
/>