You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在React中显示StreetViewPanorama?现有实现遇问题求助

在React中实现Google街景全景(StreetViewPanorama)

问题分析

你当前的代码将<StreetViewPanorama>嵌套在<GoogleMap>组件内部,这是导致只显示普通地图而非街景的核心原因。<StreetViewPanorama>不需要依赖<GoogleMap>容器,它可以独立渲染,或者通过配置<GoogleMap>的属性来切换显示街景。

解决方案1:独立渲染StreetViewPanorama

直接将<StreetViewPanorama>作为<LoadScript>的子组件,无需包裹在<GoogleMap>中:

import React from "react";
import { LoadScript, StreetViewPanorama } from "@react-google-maps/api";

function Map() {
  const containerStyle = {
    height: "400px",
    width: "800px",
  };

  const position = {
    lat: 54.364442,
    lng: 18.643173,
  };

  return (
    <LoadScript googleMapsApiKey={process.env.REACT_APP_GOOGLE_MAPS_API_KEY}>
      <StreetViewPanorama
        id="street-view"
        containerStyle={containerStyle}
        position={position}
        visible={true}
      />
    </LoadScript>
  );
}

export default React.memo(Map);

解决方案2:在GoogleMap中启用街景

如果你需要同时保留地图和街景切换的能力,可以通过<GoogleMap>的streetView属性配置:

import React from "react";
import { GoogleMap, LoadScript, StreetViewPanorama } from "@react-google-maps/api";

function Map() {
  const containerStyle = {
    height: "400px",
    width: "800px",
  };

  const center = {
    lat: 54.364442,
    lng: 18.643173,
  };

  // 创建街景实例并绑定到地图
  const streetViewPanorama = new window.google.maps.StreetViewPanorama(
    document.getElementById("street-view"),
    {
      position: center,
      visible: true,
    }
  );

  return (
    <LoadScript googleMapsApiKey={process.env.REACT_APP_GOOGLE_MAPS_API_KEY}>
      <GoogleMap
        mapContainerStyle={containerStyle}
        center={center}
        zoom={10}
        streetView={streetViewPanorama} // 绑定街景到地图
      />
    </LoadScript>
  );
}

export default React.memo(Map);

适配React路由的优化建议

为避免路由切换时重复加载Google Maps脚本,建议将<LoadScript>提升到App组件的外层,包裹整个路由结构:

修改App.js:

import "./App.css";
import { Routes, Route } from "react-router-dom";
import Home from "./pages/Home";
import NotFound from "./pages/NotFound";
import MapRoutes from "./pages/MapRoutes";
import GameRoutes from "./pages/GameRoutes";
import { LoadScript } from "@react-google-maps/api";

function App() {
  return (
    <LoadScript googleMapsApiKey={process.env.REACT_APP_GOOGLE_MAPS_API_KEY}>
      <Routes>
        <Route path="/" element={<Home />}></Route>
        <Route path="/maps/*" element={<MapRoutes />}></Route>
        <Route path="/game/*" element={<GameRoutes />}></Route>
        <Route path="*" element={<NotFound />}></Route>
      </Routes>
    </LoadScript>
  );
}

export default App;

之后在Map组件中移除<LoadScript>,直接渲染街景或地图组件即可。

内容的提问来源于stack exchange,提问作者Jakub Falkiewicz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 12:25:14