Package Exports
- react-places-autocomplete
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (react-places-autocomplete) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
react-places-autocomplete
A React component to build a customized UI for Google Maps Places Autocomplete
Features
- Enable you to easily build a customized autocomplete dropdown powered by Google Maps Places Library
- Utility function to get latitude and longitude using Google Maps Geocoder API
Installation
To install the stable version
npm install --save react-places-autocomplete
The React component is exported as a default export
import PlacesAutocomplete from 'react-places-autocomplete'
geocodeByAddress
utility function is a named export
import { geocodeByAddress } from 'react-places-autocomplete'
Demo
To run the demo in a local webpack-dev-server instance at localhost:8080
npm run demo
To run the demo tests
npm run demo:test
Getting Started
To use this component, you are going to need to load Google Maps JavaScript API
Load the library in your project
<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&libraries=places"></script>
Declare your PlacesAutocomplete component using React component
import React from 'react'
import PlacesAutocomplete, { geocodeByAddress } from 'react-places-autocomplete'
class SimpleForm extends React.Component {
constructor(props) {
super(props)
this.state = { address: 'San Francisco, CA' }
this.onChange = (address) => this.setState({ address })
this.handleFormSubmit = this.handleFormSubmit.bind(this)
}
handleFormSubmit(event) {
event.preventDefault()
const { address } = this.state
geocodeByAddress(address, (err, { lat, lng }) => {
if (err) {
console.log('Oh no!', err)
}
console.log(`Yay! got latitude and longitude for ${address}`, { lat, lng })
})
}
render() {
return (
<form onSubmit={this.handleFormSubmit}>
<PlacesAutocomplete
value={this.state.address}
onChange={this.onChange}
/>
<button type="submit">Submit</button>
</form>
)
}
}
export default SimpleForm
Props for PlacesAutocomplete
value
Type: String
,
Required: true
Value displayed in the input field
onChange
Type: Function
,
Required: true
Please see the example above
autocompleteItem
Type: Functional React Component
,
Required: false
The function takes props with suggestion
key (see the example below).
We highly recommend that you create your own custom AutocompleteItem
and pass it as a prop.
// autocompleteItem example (with font-awesome icon)
render() {
const AutocompleteItem = ({ suggestion }) => (<div><i className="fa fa-map-marker"/>{suggestion}</div>)
return (
<PlacesAutocomplete
value={this.state.value}
onChange={this.onChange}
autocompleteItem={AutocompleteItem}
/>
)
}
classNames
Type: Object
,
Required: false
You can give a custom css classes to elements.
Accepted keys are root
, label
, input
, autocompleteContainer
// classNames example
render() {
const cssClasses = {
root: 'form-group',
label: 'form-label',
input: 'form-control',
autocompleteContainer: 'my-autocomplete-container'
}
return (
<PlacesAutocomplete
value={this.state.address}
onChange={this.onChange}
classNames={cssClasses}
/>
)
}
Now you can easily apply custom CSS styles using the classNames!
styles
Type Object
,
Required: false
You can provide custom inline styles to elements.
Accepted keys are root
, label
, input
, autocompleteContainer
, autocompleteItem
, autocompleteItemActive
// custom style examples
render() {
const myStyles = {
root: { position: 'absolute' },
label: { color: 'red' },
input: { width: '100%' },
autocompleteContainer: { backgroundColor: 'green' },
autocompleteItem: { color: 'black' },
autocompleteItemActive: { color: 'blue' }
}
return (
<PlacesAutocomplete
value={this.state.address}
onChange={this.onChange}
styles={myStyles}
/>
)
}
placeholder
Type: String
,
Required: false
,
Default: "Address"
You can pass placeholder
prop to customize input's placeholder text
hideLabel
Type: Boolean
Required: false
,
Default: false
You can set hideLabel
to true
to not render the label element
onSelect
Type: function
Required: false
,
Default: null
You can pass a function that gets called instead of onChange
function when user
hits the Enter key or clicks on an autocomplete item.
geocodeByAddress
API
geocodeByAddress(address, callback)
address
Type: String
,
Required: true
String that gets passed to Google Maps Geocoder
callback
Type: Function
,
Required: true
Two arguments will be passed to the callback.
First argument is an error object, set to null
when there's no error.
Second argument is an object with lat
and lng
keys
License
MIT