react-google-maps-sep
Version:
React.js Google Maps integration component
199 lines (133 loc) • 6.35 kB
Markdown
# 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/