React.js Google Maps integration component
Declare your Google Maps components using React components.
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>
);
}
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.
Everything in the Methods
table in the official documentation 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
Every props mentioned in Rule 2 could be either controlled or uncontrolled property. Free to use either one depends on your use case.
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.
For event handlers on these components, you could bind them using React component convention. There's a list of evnet names exists in eventLists
folder. Find the supported event name and use the form of on${ camelizedEventName }
. For example, If I want to add center_changed
callback to a map instance, I'll do the following with react-google-maps
:
<GoogleMap
// onCenterChanged: on + camelizedEventName(center_change)
onCenterChanged={this.handleCenterChanged}
/>
The list of event names can be found here.
Static hosted demo site on GitHub. The code is located under examples/gh-pages folder.
react-google-maps
requires React 0.14
npm install --save react-google-maps
All components are available on the top-level export.
import { GoogleMap, Marker, SearchBox } from "react-google-maps";
triggerEvent(component, ...args)
: One common event trigger is to resize map after the size of the container div change.
import {triggerEvent} from "react-google-maps/lib/utils";
function handleWindowResize () {
triggerEvent(this._googleMapComponent, "resize");
}
// and you'll get `this._googleMapComponent` like this:
<GoogleMap ref={it => this._googleMapComponent = it} />
You could of course import from individual modules to save your webpack's bundle size.
import GoogleMap from "react-google-maps/lib/GoogleMap"; // Or import {default as GoogleMap} ...
Some addons component could ONLY be accessible via direct import:
import InfoBox from "react-google-maps/lib/addons/InfoBox";
First, clone the project.
git clone ...
Install docker@^1.8.2
, docker-compose@^1.4.0
and optionally docker-machine@^0.4.1
. Then,
docker-compose run --service-ports web
Then open 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 instead.
docker-compose build
Install node
. Then,
npm install
cd examples/gh-pages
npm install
npm start
Then open http://localhost:8080/webpack-dev-server/.
Install node
. Then,
npm install
cd examples/gh-pages
npm install
npm start:windows
Then open http://localhost:8080/webpack-dev-server/.
- Fork it
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create new Pull Request