react-baidu-map icon indicating copy to clipboard operation
react-baidu-map copied to clipboard

覆盖物被其他组件包裹后不展示

Open zim-lee opened this issue 5 years ago • 5 comments

业务场景: 想用一组数据同时展示circler和marker,只能对数据做两次map,如果用Fragment或者自定义的其他dom包括后,这两个覆盖物都不会展示 这样写不展示:

{
	data.map(({ type, color, lng, lat, radius }) => (
		<Fragment key={key}>
			<Circle
				visiable={true}
				strokeWeight={2}
				strokeColor={color}
				fillColor={color}
				fillOpacity={0.3}
				center={position}
				radius={radius}
			/>
			<Marker 
				position={position} 
				visiable
			/>
		</Fragment>
	))
}                        

这样写才行(不够优雅):

{
	data.map(({ type, color, lng, lat, radius }) => (
		<Circle
			key={type}
			visiable={true}
			strokeWeight={2}
			strokeColor={color}
			fillColor={color}
			fillOpacity={0.3}
			center={{ lng, lat }}
			radius={radius}
		/>
	))
}
{
	data.map(({ type, lng, lat }) => (
		<Marker
			key={type}
			position={{ lng, lat }} 
			visiable
		/>
	))
}

大佬有啥好的办法不

zim-lee avatar Jun 11 '20 02:06 zim-lee

https://github.com/uiwjs/react-baidu-map/blob/0c9c80019ad020f16804f193368aeb8217c2e080/src/Map/index.tsx#L108-L117

@zim-lee 我不想写冗余代码,这里实现方法是循环子节点,给子节点 传递 BMap,map 对象,如果你包裹了一层,里面就获取不到对象报错。

我为了优美需要付出代价,寻找子节点 的子节点,给它传递....

所以目前没有好的解决方案,不知道你有没有好的想法,解决这个问题。

jaywcjlove avatar Jun 11 '20 03:06 jaywcjlove

可以参考下react-amap的自定义组件,抽空我也研究下,另外Map下面的子组件有时候会在script没有加载完成的时候就渲染了,导致拿不到BMap对象

zim-lee avatar Jun 11 '20 03:06 zim-lee

https://github.com/ElemeFE/react-amap/blob/1b3fa09d05c55a7ba551a33b1b4f91e93c5d61c0/components/map/index.js#L158-L175

@zim-lee 我粗略的看了 react-amap 实现是一样的吧,你确定外层包裹还能向组件传递 BMap 对象?

在 script 没有加载完成的时候就渲染了

这个我还没有遇到,你可以建个实例我看看,或者你自己研究一下,使用之前要判断一下 BMap 是否存在吧。

jaywcjlove avatar Jun 11 '20 03:06 jaywcjlove

@jaywcjlove 或许可以更改为通过 context来传递 map实例?

liaoyinglong avatar Jan 16 '21 09:01 liaoyinglong

@liaoyinglong 可以,欢迎提交 PR

jaywcjlove avatar Jan 16 '21 09:01 jaywcjlove