Closed zhoujinxiu closed 5 years ago
您好,可能是由于key这个props是React的预留属性,在数组或者迭代器中需要有key这个属性,这里的命名产生了冲突。
关于center改变并没有中心点移动的问题,我这边暂时没有复现,但是也对逻辑部分进行了优化并更新了版本,您可以npm update react-bmap
最新版本试试有没有解决。如果依然不能解决,可以通过ref获取到地图实例,然后手动执行map.setCenterAndZoom
来改变中心点。
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号线附近的,当我改变地图高度 地图区域变小,只是改变了中心点,实际上地图并没有随着点移动过去。
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()}>
) }
现在key
的属性已经改名为keys
了,不会出现那个warning
这是代码: 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 inundefined
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是可以传递的呀。 请解答一下,急切,万分感谢!!!