在react中使用百度地图有三种方式
1:首先使用window保存BMap
1): 在创建好的react项目中的public目录下的index.html中引入
<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=您的ak"></script>
<script>
window.BMap = BMap
</script>
2):然后在src中新建BaiduMap中加入你需要的百度地图demo
componentDidMount () {
const {BMap,BMAP_STATUS_SUCCESS,BMAP_ANCHOR_TOP_LEFT}=window;
var map = new BMap.Map("allmap");
var point = new BMap.Point(116.404, 39.915);
map.centerAndZoom(point, 14);
map.enableScrollWheelZoom();
map.enableInertialDragging();
map.enableContinuousZoom();
var size = new BMap.Size(10, 20);
map.addControl(new BMap.CityListControl({
anchor: BMAP_ANCHOR_TOP_LEFT,
offset: size,
}));
var geolocation = new BMap.Geolocation();
geolocation.getCurrentPosition(function(r){
if(this.getStatus() == BMAP_STATUS_SUCCESS){
var mk = new BMap.Marker(r.point);
map.addOverlay(mk);
map.panTo(r.point);
alert('您的位置:'+r.point.lng+','+r.point.lat);
}
else {
alert('failed'+this.getStatus());
}
},{enableHighAccuracy: true})
}
render(){
return (
<div>
<div id='allmap' style={{
width:'100vw',
height:'100vh'
}}></div></div>
)
}
3):在你的入口文件index.js中使用
ReactDOM.render(<BaiduMap />, document.getElementById('root'));
2:通过webpack的externals加载BMap使它可以通过require或import引入,在node_modules中react-scripts的webpack.config.dev.js中添加
module.exports = {
/*此处省略了entry,output,modules等配置*/
externals:{
'BMap':'BMap'
},
}
例子:
import React from 'react'
import ReactDOM from 'react-dom'
import BMap from 'BMap'
class BaiduMap extends React.Component {
componentDidMount () {
var map = new BMap.Map("allmap"); // 创建Map实例
map.centerAndZoom(new BMap.Point(116.404, 39.915), 11); // 初始化地图,设置中心点坐标和地图级别
map.addControl(new BMap.MapTypeControl()); //添加地图类型控件
map.setCurrentCity("北京"); // 设置地图显示的城市 此项是必须设置的
map.enableScrollWheelZoom(true); //开启鼠标滚轮缩放
}
render () {
return (
<div>
<div
id='allmap'
style={{
width:'100vw',
height:'100vh'
}} />
</div>
)
}
}
ReactDOM.render(
<BaiduMap />,
document.getElementById('root')
)
3:使用react-bmap
- 1:首先在react项目中,npm install react-bmap --save
- 2:在react的项目的public目录中index.html中加入
<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=您的ak"></script>
- 3:例子
import React from 'react'
import {Map, Marker, NavigationControl, InfoWindow} from 'react-bmap'
class BaiduMap extends React.Component{
render(){
return (
<div>
<div id='allmap' style={{
width:'100vw',
height:'100vh'
}}>
<Map center={{lng: 116.402544, lat: 39.928216}} zoom="11">
<Marker position={{lng: 116.402544, lat: 39.928216}} />
<NavigationControl />
<InfoWindow position={{lng: 116.402544, lat: 39.928216}} text="内容" title="标题"/>
</Map>
</div></div>
)
}
}
第一种方式和第三种方式亲测有效,但是第二种在react项目中找不到webpack.config.dev.js,然后去网上找方法的时候,使用npm run eject之后,在config中还是没有,所以第二种方法我自己测试失败,有好的解决方案,可以评论,看见回复