首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用React-Google-Maps和Redux异步显示标记

React-Google-Maps是一个基于React框架的Google地图组件库,它提供了在React应用中集成Google地图的便捷方式。Redux是一个用于JavaScript应用程序状态管理的库,它可以帮助我们在应用中管理和共享数据。

在使用React-Google-Maps和Redux异步显示标记的过程中,我们可以按照以下步骤进行操作:

  1. 首先,确保你已经在项目中安装了React-Google-Maps和Redux相关的依赖包。可以通过npm或yarn进行安装。
  2. 在React组件中引入所需的库和组件:
代码语言:javascript
复制
import React, { useEffect } from 'react';
import { useDispatch, useSelector } from 'react-redux';
import { withGoogleMap, GoogleMap, Marker } from 'react-google-maps';
import { fetchMarkers } from './actions/markersActions';
  1. 创建一个Redux action来获取标记数据。在actions/markersActions.js文件中,可以定义一个fetchMarkers函数来异步获取标记数据:
代码语言:javascript
复制
export const fetchMarkers = () => {
  return async (dispatch) => {
    try {
      // 异步获取标记数据的逻辑
      const markers = await fetch('https://api.example.com/markers');
      const data = await markers.json();

      // 将获取到的标记数据传递给Redux store
      dispatch({ type: 'FETCH_MARKERS_SUCCESS', payload: data });
    } catch (error) {
      dispatch({ type: 'FETCH_MARKERS_ERROR', payload: error.message });
    }
  };
};
  1. 创建一个Redux reducer来处理标记数据的状态变化。在reducers/markersReducer.js文件中,可以定义一个markersReducer函数来处理标记数据的状态变化:
代码语言:javascript
复制
const initialState = {
  markers: [],
  loading: false,
  error: null,
};

const markersReducer = (state = initialState, action) => {
  switch (action.type) {
    case 'FETCH_MARKERS_SUCCESS':
      return {
        ...state,
        markers: action.payload,
        loading: false,
        error: null,
      };
    case 'FETCH_MARKERS_ERROR':
      return {
        ...state,
        markers: [],
        loading: false,
        error: action.payload,
      };
    default:
      return state;
  }
};

export default markersReducer;
  1. 在React组件中使用Redux来获取标记数据并在地图上显示。在你的React组件中,可以使用useDispatchuseSelector钩子来分发Redux action和获取标记数据:
代码语言:javascript
复制
const MapContainer = () => {
  const dispatch = useDispatch();
  const markers = useSelector((state) => state.markers.markers);
  const loading = useSelector((state) => state.markers.loading);
  const error = useSelector((state) => state.markers.error);

  useEffect(() => {
    dispatch(fetchMarkers());
  }, [dispatch]);

  const GoogleMapComponent = withGoogleMap(() => (
    <GoogleMap defaultCenter={{ lat: 0, lng: 0 }} defaultZoom={10}>
      {markers.map((marker) => (
        <Marker key={marker.id} position={{ lat: marker.lat, lng: marker.lng }} />
      ))}
    </GoogleMap>
  ));

  return (
    <div>
      {loading ? (
        <p>Loading...</p>
      ) : error ? (
        <p>Error: {error}</p>
      ) : (
        <GoogleMapComponent
          containerElement={<div style={{ height: '400px', width: '100%' }} />}
          mapElement={<div style={{ height: '100%' }} />}
        />
      )}
    </div>
  );
};

在上述代码中,我们首先使用useDispatch钩子获取dispatch函数,然后使用useSelector钩子获取标记数据、加载状态和错误信息。在组件挂载时,我们通过dispatch(fetchMarkers())来触发异步获取标记数据的action。最后,我们使用withGoogleMap高阶组件创建一个包含标记的Google地图组件,并根据标记数据动态渲染标记。

这样,当组件渲染时,它会根据Redux store中的标记数据来显示地图上的标记。同时,我们还处理了加载状态和错误信息,以提供更好的用户体验。

推荐的腾讯云相关产品:腾讯云地图服务(https://cloud.tencent.com/product/tianditu

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

11分32秒

116_尚硅谷_React全栈项目_使用redux-thunk实现异步redux

11分57秒

128_尚硅谷_React全栈项目_自定义react-redux_context的理解和使用

34分5秒

javaweb项目实战 19使用AJAX异步验证用户唯一和验证码是否正确 学习猿地

9分36秒

day05/上午/092-尚硅谷-尚融宝-使用计算属性和方法显示反转字符串

36分15秒

29_应用练习_使用三级缓存显示图片.avi

45秒

选择振弦采集仪:易操作、快速数据传输和耐用性是关键要素

12秒

360度视角电子蜡烛

1分30秒

煤矿皮带急停报警监测系统

4分29秒

MySQL命令行监控工具 - mysqlstat 介绍

3分8秒

智能振弦传感器参数智能识别技术:简化工作流程,提高工作效率的利器

2分7秒

手持501TC采集仪连接两线制传感器及存储查看

26分40秒

晓兵技术杂谈2-intel_daos用户态文件系统io路径_dfuse_io全路径_io栈_c语言

3.4K
领券