huiyan-fe / react-bmap

基于百度地图JavaScript API封装的React组件库
http://huiyan-fe.github.io/react-bmap
MIT License
497 stars 97 forks source link

地图高度发生变化时,设置中心点坐标,地图并没有随着点动起来,好像地图并没有重新渲染 #67

Closed zhoujinxiu closed 5 years ago

zhoujinxiu commented 5 years ago

这是代码: render() { const {selCurCityInfo, isMapViewShow,mapViewHeight} = store; <Map key={mapViewHeight } ref={this.map} style={{height: mapViewHeight + 'px'}} center={mapCenter} zoom={mapZoom} minZoom='10' maxZoom='13' enableDoubleClickZoom={false} enableAutoResize={false} events={this.getEvents()}> } 地图高度发生变化时,设置中心点坐标,地图并没有随着点动起来,好像地图并没有重新渲染。给Map设置key时,就可以正常渲染地图,但是此时控制台会给出警告:

Warning: Map: key is not a prop. Trying to access it will result in undefined being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://fb.me/react-special-props)

查看map.js源码,key是可以传递的呀。 请解答一下,急切,万分感谢!!!

Junior2Ran commented 5 years ago

您好,可能是由于key这个props是React的预留属性,在数组或者迭代器中需要有key这个属性,这里的命名产生了冲突。

关于center改变并没有中心点移动的问题,我这边暂时没有复现,但是也对逻辑部分进行了优化并更新了版本,您可以npm update react-bmap最新版本试试有没有解决。如果依然不能解决,可以通过ref获取到地图实例,然后手动执行map.setCenterAndZoom来改变中心点。

zhoujinxiu commented 5 years ago

selCommunityOverlay = (item) => { let curMap = this.map.current.map; let BMap = window.BMap; let {filterParam, resetAuctionListStatus} = store; curMap.setCenter({lng:item.communityCoordinate.lon,lat:item.communityCoordinate.lat}); curMap.panTo(new BMap.Point(item.communityCoordinate.lon, item.communityCoordinate.lat), {noAnimation: false}); }

那如果由于key这个props是React的预留属性,那源码中可以传递key是不是要修改一下呢? 我是通过this.map.current.map拿到的地图实例,使用setCenter重置地图的中心点,但是此时虽然地图的中心点变成了我设置的那个点,但是位置是不对的,比如北京大兴区回龙观东大街这个地方实在13号线附近的,当我改变地图高度 地图区域变小,只是改变了中心点,实际上地图并没有随着点移动过去。

zhoujinxiu commented 5 years ago

图片地址:http://img30.360buyimg.com/uba/jfs/t1/49831/8/3242/88680/5d10cadaE3d663b91/8e193f00519d032c.png

https://img30.360buyimg.com/uba/jfs/t1/75010/35/2847/42023/5d10cb5aEdf7c0f7a/ffa8959642f3a349.png

图片应该可以打开 你可以对比下这两个截图。

zhoujinxiu commented 5 years ago

gif图: https://img30.360buyimg.com/uba/jfs/t1/43022/1/7436/682367/5d10cbf2E995b0205/af9d8e3557ed7086.gif

正确的效果应该是这样:

如果这么用,就可以,但是会提示一开始提的那个警告。

selCommunityOverlay = (item) => { let curMap = this.map.current.map; let BMap = window.BMap; curMap.panTo(new BMap.Point(item.communityCoordinate.lon, item.communityCoordinate.lat), {noAnimation: false}); }

render() { return( <Map key={mapViewHeight} ref={this.map} style={{height: mapViewHeight + 'px'}} center={mapCenter} zoom={mapZoom} minZoom='10' maxZoom='13' enableDoubleClickZoom={false} enableAutoResize={false} events={this.getEvents()}>

自定义的覆盖物

) }

zhoujinxiu commented 5 years ago

附上正确的效果图: https://img12.360buyimg.com/uba/jfs/t1/56922/5/3269/695517/5d10ccf7Ecfda5871/cd9485eb69a888d6.gif

Junior2Ran commented 5 years ago

现在key的属性已经改名为keys了,不会出现那个warning