Попытка передать значения геолокации дочернему компоненту в React с помощью google-maps-реагировать

Я немного поработал над этим: я получил свою Карту для рендеринга в родительский компонент с помощью google-maps-реагировать, HoC и перекомпоновать, но я не могу передать значения геолокации от родителя к потомку. Пожалуйста, смотрите ниже (я довольно новичок в React... так что, пожалуйста, будьте осторожны):

родитель

class MapContainer extends Component {
  constructor(props) {
    super(props);
    this.state = {
      latCords: '',
      longCords: ''
    };
  }
  componentDidMount() {
    if ('geolocation' in navigator) {
      navigator.geolocation.getCurrentPosition(position => {
        this.setState({
          latCords: position.coords.latitude,
          longCords: position.coords.longitude
        });
        //return position.coords.latitude, position.coords.longitude;
      });
    } else {
      /* geolocation IS NOT available */
      alert(
        "We're sorry! Geolocation is not available for some reason..."
      );
    }
  }

  render() {
    const userCORDS = [this.state.latCords, this.state.longCords];
    return <MyMapComponent userCords = {
      userCORDS
    }
    />;
  }
}
export default MapContainer;
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>

Ребенок, используя пакет google-maps-реакции

import {
  compose,
  withProps
} from 'recompose';
import {
  withScriptjs,
  withGoogleMap,
  GoogleMap,
  Marker
} from 'react-google-maps';

const MyMapComponent = compose(
  withProps({
    googleMapURL: 'https://maps.googleapis.com/maps/api/js?key=***',
    //'https://maps.googleapis.com/maps/api/js?v=3.exp&libraries=geometry,drawing,places',
    loadingElement: < div style = {
      {
        height: `100%`
      }
    }
    />,
    containerElement: < div style = {
      {
        height: `400px`
      }
    }
    />,
    mapElement: < div style = {
      {
        height: `100%`
      }
    }
    />
  }),
  withScriptjs,
  withGoogleMap
)(props => ( <
  GoogleMap defaultZoom = {
    12
  }
  defaultCenter = {
    {
      lat: '',
      lng: ''
    }
  } > {
    props.isMarkerShown && ( <
      Marker position = {
        {
          lat: '',
          lng: ''
        }
      }
      onClick = {
        props.onMarkerClick
      }
      />
    )
  } <
  /GoogleMap>
));

class MyFancyComponent extends React.PureComponent {
  state = {
    isMarkerShown: false
  };

  componentDidMount() {
    this.delayedShowMarker();
  }

  delayedShowMarker = () => {
    setTimeout(() => {
      this.setState({
        isMarkerShown: true
      });
    }, 3000);
  };

  handleMarkerClick = () => {
    this.setState({
      isMarkerShown: false
    });
    this.delayedShowMarker();
  };

  render() {
    console.log(props.userCords[0]);
    return ( <
      MyMapComponent isMarkerShown = {
        this.state.isMarkerShown
      }
      onMarkerClick = {
        this.handleMarkerClick
      }
      />
    );
  }
}
export default MyMapComponent;
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>

0 ответов

Другие вопросы по тегам