Как обновить React Google Map после получения данных с сервера - PullRequest
0 голосов
/ 17 июня 2019

Как обновить ReactGoogleMap после получения данных с сервера?

Так я создаю Карту Google с помощью интерфейса activ-google-maps.

import React from "react"
import { compose, withProps } from "recompose"
import { withScriptjs, withGoogleMap, GoogleMap, Marker , Polyline} from "react-google-maps"
import TextField from "@material-ui/core/TextField";
import Button from "components/CustomButtons/Button.jsx";
import './Maps.css';
import axios from "axios";

const pathCoordinates = [
        { lat: 1.322459, lng: 103.853972 },
        { lat: 1.39227, lng: 103.752 }
    ];

const MyMapComponent = compose(
  withProps({
    googleMapURL: "https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&v=3.exp&libraries=geometry,drawing",
    loadingElement: <div style={{ height: `100%` }} />,
    containerElement: <div style={{ height: `80vh` }} />,
    mapElement: <div style={{ height: `100%` }} />,
  }),
  withScriptjs,
  withGoogleMap
)((props) =>
  <GoogleMap
    defaultZoom={12}
    defaultCenter={{ lat: 1.322459, lng: 103.853972  }}
  >
  <div id='map_controls' class='toolbox'>
  <TextField 
    id="date"
    label="Date"
    type="date"
    defaultValue= ""
    InputLabelProps={{
        shrink: true,
        style: { color: '#fff' }
    }}
    value={props.date}
    onChange={props.handleChange('date')}
    />
    <Button color="primary" onClick={props.handleSubmit}>Select Date</Button>
  </div>
  {console.log("drawing...............")}
  {props.drawMap()}

  </GoogleMap>
)

const initialState = {
    date: "",
    data: []
};

class Maps extends React.Component {
    constructor(props) {
            super(props);
            this.state = initialState;
            this.handleChange = this.handleChange.bind(this);
            this.handleSubmit = this.handleSubmit.bind(this);
            this.drawMap = this.drawMap.bind(this);
          }

  componentDidMount() {
    console.log(" componentDidMount   "+this.state.date);
  }


    handleChange = name => event => {
    this.setState({ [name]: event.target.value });

  };

  handleSubmit(event) {

    const input = {};
    input["date"] = this.state.date;

    axios.post("localhost:4000/readMap", input)
    .then(response => {
      console.log({response});
      this.setState({data: response.data});

        })
    .catch(error => {console.log(error.response)});
    event.preventDefault();
  }

  drawMap(){

      if(!(this.state.date==="")){
      var rows = [];
        for (var i = 0; i < 2; i++) {

        if(i===0){
            rows.push(<Marker label= {(i+1).toString()} position={{ lat: 1.39227, lng: 103.752 }}  key={i} />);
        }else if(i===1){
            rows.push(<Marker label= {(i+1).toString()} position={{ lat: 1.322459, lng: 103.853972 }}  key={i} />);
        }else{

        }
    }
        return (<div>{rows}<Polyline
                path={pathCoordinates}
                geodesic={true}
                options={{
                    strokeColor: "#ff2527",
                    strokeOpacity: 0.75,
                    strokeWeight: 2
                }}
            /></div>);
      }else{
          console.log("no date");
      }

  }

  render() {
      this.drawMap();
    return (
      <MyMapComponent
        handleChange={this.handleChange}
        handleSubmit={this.handleSubmit}
        drawMap={this.drawMap}
      />
    )
  }
}

export default Maps;

Я хочу нарисоватьмаркер после получения данных из базы данных.Я успешно прочитал ввод (который является датой) от пользователя и отправил эти данные на сервер, чтобы получить данные этой даты из базы данных.Данные успешно получены и могут распечатать их в консоли.Тем не менее, я понятия не имею, как обновить MyMapComponent для отображения маркера этой даты.Я снова запускаю функцию drawMap () после получения данных, но MyMapComponent не обновляется после запуска drawMap().

1 Ответ

0 голосов
/ 18 июня 2019

Я нашел решение.

render() {
      console.log("render::::::::::::::::::::");
    return (
      <MyMapComponent
        handleChange={this.handleChange}
        handleSubmit={this.handleSubmit}
        drawMap={this.drawMap}
      >
      {this.drawMap()}
      </MyMapComponent>
    )
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...