javascript - 使用带有 react-intersection-observer 的谷歌地图 google-maps-react npm 包来增加灯塔分数
问题描述
我正在努力提高我正在建设的 Gatsby 网站的灯塔分数。它要求我做的一件事是推迟我使用 gatsby 图像插件完成的屏幕外图像。然而,谷歌地图正在加载它要求延迟的图像,因为它位于页脚中。我正在使用这个 npm 包来加载地图https://www.npmjs.com/package/google-maps-react
所以我尝试使用 npm 包react-intersection-observer
并在视图中/不在视图中时显示/隐藏整个地图组件。
我遇到的问题是这将我的灯塔得分提高了大约 5 分。但是地图不再加载我在默认为 sanfransico 的组件中输入的坐标。我认为这是因为它加载较晚。解决此问题的解决方案是什么?
这是我的钩子代码
//**********Google Maps Variables*****/
const [ref, inView, entry] = useInView({
/* Optional options */
threshold: 0,
})
const style = {
width: '100%',
height: '400px',
position: 'relative',
}
const coords = { lat: 53.541581, lng: -113.295608 };
//**********Google maps varaibles end*** */
这是我的组件代码
<Footer ref={ref} className="copyright">
{inView &&
<GoogleMap >
<Map
google={window.google}
style={style}
containerStyle={style}
center={{
lat: 53.541581,
lng:-113.295608
}}
zoom={12}
mapTypeControl={false}
>
<Marker
title={'Glen Alen Recreation Center'}
name={'GARC'}
position={{lat: 53.530358, lng: -113.282250}} />
<Marker
title={'Millenium Place'}
name={'Millenium'}
position={{lat: 53.559414, lng: -113.314161}} />
<Circle
radius={3900}
center={coords}
strokeColor='transparent'
strokeOpacity={0}
strokeWeight={5}
fillColor='#30cefd'
fillOpacity={0.2}
/>
</Map>
</GoogleMap>
}
</Footer>
更新
我尝试将坐标变量直接移动到组件中,但仍然没有区别,嗯...
更新#2
因此,如果我导航到它们,我的标记和圆圈就会显示出来,但是在使用此交叉点观察器时,默认的起始位置中心 lat 和 lng 不正确,如果我删除了 inView,它是正确的。
更新#3
我尝试的最后一件事是像在示例中那样从道具加载地图,因为我使用的是 window.properties。我试过这个<Map google={props.google}>
。我删除了this
因为 props 可以从功能组件中单独使用。然而,道具作为一个对象存在,但 props.google 没有,所以它只是无休止地加载
解决方案
我最终只使用了这个 npm 包,据我所知,它工作得更好https://www.npmjs.com/package/google-map-react
推荐阅读
- jquery - 没有ID的jquery悬停
- javascript - 在单击提交按钮之前未触发模糊功能?
- node.js - 节点服务器不工作
- java - 保持视频喜欢whatsapp自定义相机活动
- python-2.7 - 无法在 google colaboratory 上运行 caffe2
- c - 在C中以升序显示字符
- jquery - 向使用 Serenity 模板的 ASP.NET 应用程序添加字段验证
- linux - 本地计算机上的 2 个 Postgres 服务器。如何卸载或解除关联?
- sql - 从列中查找具有一个或两个数值的记录
- django - Modelforms:更新时无法查看可编辑内容