UNPKG

react-google-maps-sep

Version:
199 lines (133 loc) 6.35 kB
# react-google-maps [![Travis CI][travis-image]][travis-url] [![Quality][codeclimate-image]][codeclimate-url] [![Coverage][codeclimate-coverage-image]][codeclimate-coverage-url] [![Dependencies][gemnasium-image]][gemnasium-url] [![Gitter][gitter-image]][gitter-url] > React.js Google Maps integration component [![Version][npm-image]][npm-url] ## Quick start: SimpleMap Declare your Google Maps components using React components. ```js import {GoogleMap, Marker} from "react-google-maps"; export default function SimpleMap (props) { return ( <section style={{height: "100%"}}> <GoogleMap containerProps={{ style: { height: "100%", }, }} defaultZoom={3} defaultCenter={{lat: -25.363882, lng: 131.044922}} onClick={props.onMapClick} > {props.markers.map((marker, index) => { return ( <Marker {...marker} onRightclick={() => props.onMarkerRightclick(index)} /> ); })} </GoogleMap> </section> ); } ``` ## Documentation ### Rule 1 Define `<GoogleMap>` component in the top level. Use `containerProps`, `containerTagName` to customized the wrapper DOM for the component. Other components like `<Marker>` belongs to the children of `<GoogleMap>`. You already know this from the example code above. ### Rule 2 Everything in the `Methods` table in the [official documentation](https://developers.google.com/maps/documentation/javascript/3.exp/reference#Marker) of the component could be set via component's *props* directly. For example, a `<Marker>` component has the following *props*: ``` animation, attribution, clickable, cursor, draggable, icon, label, opacity, options, place, position, shape, title, visible, zIndex ``` ### Rule 3 Every props mentioned in __Rule 2__ could be either [controlled](https://facebook.github.io/react/docs/forms.html#controlled-components) or [uncontrolled](https://facebook.github.io/react/docs/forms.html#uncontrolled-components) property. Free to use either one depends on your use case. ### Rule 4 Anything that are inside components' `options` property could __ONLY__ be accessible via `props.options`. It's your responsibility to manage `props.options` object during the React lifetime for your component. My suggestion is, always use __Rule 3__ if possible. Only use `options` when it's necessary. ### Map Event Triggers One common event trigger is to resize map after the size of the container div changes: ```js componentDidUpdate() { var map = ReactDOM.findDOMNode(this.refs.map); window.google.maps.event.trigger(map, 'resize'); } <GoogleMap {...props} ref="map" > ... </GoogleMap> ``` ### Check the examples Static hosted [demo site][demo] on GitHub. The code is located under [examples/gh-pages][examples_gh_pages] folder. ## Usage `react-google-maps` requires __React 0.14__ ```sh npm install --save react-google-maps ``` All components are available on the top-level export. ```js import { GoogleMap, Marker, SearchBox } from "react-google-maps"; ``` ### Optimize bundle size You could of course import from individual modules to save your [webpack][webpack]'s bundle size. ```js import GoogleMap from "react-google-maps/lib/GoogleMap"; // Or import {default as GoogleMap} ... ``` ### Additional Addons Some addons component could __ONLY__ be accessible via direct import: ```js import InfoBox from "react-google-maps/lib/addons/InfoBox"; ``` ## Development First, clone the project. ```shell git clone ... ``` ### With Docker Install `docker@^1.8.2`, `docker-compose@^1.4.0` and optionally `docker-machine@^0.4.1`. Then, ```shell docker-compose run --service-ports web ``` Then open [http://192.168.59.103:8080](http://192.168.59.103:8080). **192.168.59.103** is actually your ip from `docker-machine ip`. If you change code in your local, you'll need to rebuild the image to make changes happen. If you're previously using `boot2docker`, you may want to migrate to [docker-machine](https://docs.docker.com/machine/migrate-to-machine/) instead. ```shell docker-compose build ``` ### With Mac Install `node`. Then, ```shell npm install cd examples/gh-pages npm install npm start ``` Then open [http://localhost:8080/webpack-dev-server/](http://localhost:8080/webpack-dev-server/). ### With Windows Install `node`. Then, ```shell npm install cd examples/gh-pages npm install npm start:windows ``` Then open [http://localhost:8080/webpack-dev-server/](http://localhost:8080/webpack-dev-server/). ## Contributing [![devDependency Status][david-dm-image]][david-dm-url] 1. Fork it 2. Create your feature branch (`git checkout -b my-new-feature`) 3. Commit your changes (`git commit -am 'Add some feature'`) 4. Push to the branch (`git push origin my-new-feature`) 5. Create new Pull Request [npm-image]: https://img.shields.io/npm/v/react-google-maps.svg?style=flat-square [npm-url]: https://www.npmjs.org/package/react-google-maps [travis-image]: https://img.shields.io/travis/tomchentw/react-google-maps.svg?style=flat-square [travis-url]: https://travis-ci.org/tomchentw/react-google-maps [codeclimate-image]: https://img.shields.io/codeclimate/github/tomchentw/react-google-maps.svg?style=flat-square [codeclimate-url]: https://codeclimate.com/github/tomchentw/react-google-maps [codeclimate-coverage-image]: https://img.shields.io/codeclimate/coverage/github/tomchentw/react-google-maps.svg?style=flat-square [codeclimate-coverage-url]: https://codeclimate.com/github/tomchentw/react-google-maps [gemnasium-image]: https://img.shields.io/gemnasium/tomchentw/react-google-maps.svg?style=flat-square [gemnasium-url]: https://gemnasium.com/tomchentw/react-google-maps [gitter-image]: https://badges.gitter.im/Join%20Chat.svg [gitter-url]: https://gitter.im/tomchentw/react-google-maps?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge [david-dm-image]: https://img.shields.io/david/dev/tomchentw/react-google-maps.svg?style=flat-square [david-dm-url]: https://david-dm.org/tomchentw/react-google-maps#info=devDependencies [demo]: http://tomchentw.github.io/react-google-maps/ [examples_gh_pages]: https://github.com/tomchentw/react-google-maps/tree/master/examples/gh-pages [webpack]: http://webpack.github.io/docs/tutorials/getting-started/