【发布时间】:2021-08-05 13:45:56
【问题描述】:
我有一个<GoogleMapReact> 组件,我使用onGoogleApiLoaded 在地图上通过点列表渲染了一些圆圈:
const tags = [allJobsTag].concat(settings.jobs.filter((job) => !job.deleted));
const [tag, setTag] = useState(allJobsTag);
function renderGeoFences(map, maps) {
_.map(geoFencesSites, (site) => {
let circle = new maps.Circle({
strokeColor: tag.id==='all-jobs'?"orange":'#1aba8b26',
strokeOpacity: 1,
strokeWeight: 4,
fillColor: '#1aba8b1f',
fillOpacity: 1,
map,
center: { lat: Number(site.location.latitude), lng: Number(site.location.longitude) },
radius: site.fenceSize,
});
});
}
let apiIsLoaded = (map, maps) => {
renderGeoFences(map, maps);
};
return(
<GoogleMapReact>
zoom={getMapZoom()}
center={{ lat: centerLatitude, lng: centerLongitude }}
options={{
fullscreenControl: false,
zoomControlOptions: { position: 3 },
}}
yesIWantToUseGoogleMapApiInternals
onGoogleApiLoaded={({ map, maps }) => apiIsLoaded(map, maps)}
>
{renderAddresses()}
{renderUsersLocation()}
{renderHighlightedUserRoute()}
</GoogleMapReact>
)
然后在renderGeoFences中渲染圆圈。
但是,这个函数只是被调用的,即使里面有状态,圆圈也不会受到状态的影响。 就像在这个例子中一样,当我尝试通过 tag.id 更改圆圈的颜色时(标签是一个状态)。 当状态发生变化时,如何让这个函数再次渲染?
【问题讨论】:
-
你能发布整个组件吗?请格式化。
-
@Elias 感谢您的反馈。我添加了“renderGeoFences”功能。
-
我在建议的编辑中为您格式化了代码:)。这样做之后,有几件事让我感到好奇。 1.
apiIsLoaded似乎是某种检查,但它没有返回任何内容,并且它始终是未定义的。 2、apiIsLoaded可以去掉,直接调用renderGeoFences。 -
我从未见过你设置任何状态。这就是我要求整个组件的原因。
-
@Elias 我添加了状态。
渲染其形状( 、 )必须通过 onGoogleApiLoaded 调用
标签: javascript reactjs state google-maps-react