uiwjs / react-baidu-map

基于 React 封装的百度地图组件,支持 React Hook,帮助你轻松的接入地图到 React 项目中。
https://uiwjs.github.io/react-baidu-map
MIT License
225 stars 22 forks source link

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

Open zim-lee opened 4 years ago

zim-lee commented 4 years ago

业务场景: 想用一组数据同时展示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
        />
    ))
}

大佬有啥好的办法不

jaywcjlove commented 4 years ago

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

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

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

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

zim-lee commented 4 years ago

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

jaywcjlove commented 4 years ago

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

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

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

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

liaoyinglong commented 3 years ago

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

jaywcjlove commented 3 years ago

@liaoyinglong 可以,欢迎提交 PR