覆盖物被其他组件包裹后不展示
业务场景: 想用一组数据同时展示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
/>
))
}
大佬有啥好的办法不
https://github.com/uiwjs/react-baidu-map/blob/0c9c80019ad020f16804f193368aeb8217c2e080/src/Map/index.tsx#L108-L117
@zim-lee 我不想写冗余代码,这里实现方法是循环子节点,给子节点 传递 BMap,map 对象,如果你包裹了一层,里面就获取不到对象报错。
我为了优美需要付出代价,寻找子节点 的子节点,给它传递....
所以目前没有好的解决方案,不知道你有没有好的想法,解决这个问题。
可以参考下react-amap的自定义组件,抽空我也研究下,另外Map下面的子组件有时候会在script没有加载完成的时候就渲染了,导致拿不到BMap对象
https://github.com/ElemeFE/react-amap/blob/1b3fa09d05c55a7ba551a33b1b4f91e93c5d61c0/components/map/index.js#L158-L175
@zim-lee 我粗略的看了 react-amap 实现是一样的吧,你确定外层包裹还能向组件传递 BMap 对象?
在 script 没有加载完成的时候就渲染了
这个我还没有遇到,你可以建个实例我看看,或者你自己研究一下,使用之前要判断一下 BMap 是否存在吧。
@jaywcjlove 或许可以更改为通过 context来传递 map实例?
@liaoyinglong 可以,欢迎提交 PR